日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我試圖使用Jodatime顯示特定時間段內的交易.

我們的服務器要求開始日期和結束日期為UTC(這可能是顯而易見的).因此,圍繞它們的任何業務邏輯都使用DateTime對象,時區設置為DateTimeZone.UTC,例如,

mStartDate = DateTime.now(UTC).withTimeAtStartOfDay();

除了顯示我不知道如何為本地(系統默認)時區增加它的時間之外,這很有效.理想情況下,我想使用傳遞兩個本地時間戳的DateUtils formatDateRange函數.但getMillis()函數似乎不考慮本地偏移:

我也試過這個:

mTimePeriodTitle.setText(DateUtils.formatDateRange(mContext, f, mStartDate.getMillis(),

mEndDate.getMillis(), DateUtils.FORMAT_SHOW_TIME,

TimeZone.getDefault().getID()).toString());

但它沒有任何區別.所以我的問題是如何獲得具有2個UTC時間戳的格式良好的本地日期范圍?

解決方法:

如果您的DateTime是UTC并且您想將其轉換為另一個時區,則可以使用withZone方法進行轉換.

對于下面的示例,我的默認時區是America / Sao_Paulo(您可以使用DateTimeZone.getDefault()檢查您的時區):

// create today's date in UTC

DateTime mStartDate = DateTime.now(DateTimeZone.UTC).withTimeAtStartOfDay();

// date/time in UTC

System.out.println(mStartDate); // 2017-06-13T00:00:00.000Z

// date/time in my default timezone (America/Sao_Paulo)

System.out.println(mStartDate.withZone(DateTimeZone.getDefault())); // 2017-06-12T21:00:00.000-03:00

輸出是:

2017-06-13T00:00:00.000Z

2017-06-12T21:00:00.000-03:00

請注意,withZone方法正確地將日期和時間轉換為我的時區(在America / Sao_Paulo中,當前偏移量為UTC-03:00),因此進行了相應調整.

如果您想獲得時間(小時/分鐘/秒),可以使用toLocalTime()方法:

System.out.println(mStartDate.withZone(DateTimeZone.getDefault()).toLocalTime()); // 21:00:00.000

輸出是:

21:00:00.000

如果您想要其他格式(例如,不打印秒數的3位數),則可以使用DateTimeFormatter.好處是您可以在格式化程序中設置時區,因此您無需轉換DateTime:

// create formatter for hour/minute/second, set it with my default timezone

DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ss").withZone(DateTimeZone.getDefault());

System.out.println(fmt.print(mStartDate)); // 21:00:00

輸出是:

21:00:00

要獲得范圍,可以使用上述方法之一和DateTime(mStartDate和mEndDate),并使用DateTimeFormatter更改為您需要的任何格式.

PS:我認為你在使用getMillis()時缺少的是日期時間(UTC和默認時區)代表同一時刻.你只是將這一瞬間轉換為當地時間,但毫秒是相同的(想想,此時此刻,世界上的每個人都處于同一時刻(相同的毫秒),但他們的當地時間可能會有所不同取決于他們在哪里).因此,在將UTC DateTime轉換為另一個時區時,我們只是找到該區域中的當地時間,該時間對應于相同的millis.

您可以在兩個對象上使用getMillis()方法檢查:

System.out.println(mStartDate.getMillis()); // 1497312000000

System.out.println(mStartDate.withZone(DateTimeZone.getDefault()).getMillis()); // 1497312000000

請注意,即使我將對象轉換為另一個時區,millis仍保持不變(1497312000000).那是因為兩者都代表同一時刻,我只是將它們移動到另一個時區,其中各自的當地時間不同.

Java新的日期/時間API

Joda-Time它被停用并被新的API取代,所以我不建議用它開始一個新項目.如果是這種情況,您可以考慮使用新的日期/時間API,但如果您使用Joda的代碼庫很大或者現在不想遷移它,您可以考慮其余的答案.

無論如何,即使在joda’s website它說:“請注意,Joda-Time被認為是一個很大程度上已完成的項目.沒有計劃進行重大改進.如果使用Java SE 8,請遷移到java.time(JSR-310).” *.

如果您使用Java< = 7,則可以使用ThreeTen Backport,這是Java 8的新日期/時間類的一個很好的后端.對于Android,有一種方法可以使用它,使用ThreeTenABP(更多關于如何使用它here).

以下代碼適用于兩者.

唯一的區別是包名稱(在Java 8中是java.time,在ThreeTen Backport(或Android的ThreeTenABP)中是org.threeten.bp),但類和方法名稱是相同的.

要以UTC開頭獲取當前日期,您可以執行以下操作:

// UTC's today at start of the day

ZonedDateTime utc = LocalDate.now(ZoneOffset.UTC).atStartOfDay(ZoneOffset.UTC);

System.out.println(utc); // 2017-06-13T00:00Z

首先,我使用LocalDate.now(ZoneOffset.UTC)來查找UTC中的當前本地日期.如果我只使用LocalDate.now(),它將在我的默認時區得到當前日期,這不是我們想要的(它可能與UTC不同,具體取決于你在哪里 – 何時 – 你是什么以及默認時區是什么是).

然后我使用atStartOfDay(ZoneOffset.UTC)來獲取UTC當天的開始.我知道使用UTC兩次聽起來多余,但是API允許我們在這種方法中使用任何時區,而IMO它明確了我們想要的時區(如果日期是在夏令時變化的時區,那么一天的開始可能不是午夜 – 時區參數是為了保證設置正確的值).

輸出是:

2017-06-13T00:00Z

要轉換為我的默認時區,我可以使用ZoneId.systemDefault(),在我的例子中返回America / Sao_Paulo.要轉換它并只獲取本地時間部分,只需執行以下操作:

System.out.println(utc.withZoneSameInstant(ZoneId.systemDefault()).toLocalTime()); // 21:00

輸出是:

21:00

如果要更改它,還可以使用格式化程序:

// formatter for localtime (hour/minute/second)

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss");

System.out.println(fmt.format(utc.withZoneSameInstant(ZoneId.systemDefault()))); // 21:00:00

輸出是:

21:00:00

標簽:android,java,datetime,jodatime,datetime-conversion

來源: https://codeday.me/bug/20190727/1551856.html

總結

以上是生活随笔為你收集整理的java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。