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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com...

發布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tl;dr

OffsetDateTime.now().getOffset()

但您可能應該使用時區而不是僅僅偏離UTC。

ZoneId.systemDefault()

Offset versus Time Zone

offset-from-UTC只是一小時,幾分鐘和幾秒鐘 - 僅此而已。

time zone是特定地區人民使用的偏移的過去,現在和未來變化的歷史。時區有一組規則來處理諸如Daylight Saving Time (DST)之類的異常,這些異常會導致特定時間段內偏移的變化。

時區=(偏移歷史+異常規則)

因此,在知道時更好地使用區域。

任何地區的偏移量隨時間而變化。例如,DST in the United States將偏移量移動一個小時,大約一半,然后在一年的另一半中將該小時恢復到偏移量。時區的整個目的是記錄偏移量的變化。

因此,在沒有日期時間的情況下要求偏移是沒有意義的。在America/Los_Angeles,例如在今年的部分時間,補償是-08:00,但在夏令時期間的另一部分是-07:00。

OffsetDateTime

OffsetDateTime odt = OffsetDateTime.now ();

ZoneOffset zoneOffset = odt.getOffset ();

odt.toString():2017-01-02T15:19:47.162-08:00

zoneOffset.toString(): - 08:00

now方法實際上是隱式應用JVM的當前默認時區。我建議您始終通過指定所需/預期的時區來明確說明。即使您想要當前的默認區域,也要明確說明您的意圖。消除關于您是否打算默認或未能考慮時區的模糊性,因為程序員經常會這樣做。打電話給ZoneId.systemDefault。

OffsetDateTime odt = OffsetDateTime.now ( ZoneId.systemDefault () );

ZoneOffset zoneOffset = odt.getOffset ();

ZoneId.systemDefault()。toString():America / Los_Angeles

自:2017-01-02T15:19:47.162-08:00

zoneOffsetOfOdt:-08:00

關于依賴于默認區域的注意事項:此默認值可隨時由JVM中任何線程中的任何代碼更改。如果重要,請詢問用戶預期的時區。

您可以將偏移量作為總秒數詢問偏移量。

int offsetSeconds = zoneOffset.getTotalSeconds ();

offsetSeconds:-28800

ZonedDateTime

另一個例子:也許你想知道今年圣誕節在魁北克會有什么補償。指定時區America/Montreal,得到一個ZonedDateTime,請求它作為ZoneOffset對象的偏移量。

ZoneId z = ZoneId.of( "America/Montreal" );

LocalDate ld = LocalDate.of( 2017 , 12 , 25 );

ZonedDateTime zdtXmas = ld.atStartOfDay( z );

ZoneOffset zoneOffsetXmas = zdtXmas.getOffset();

zdtXmas.toString():2017-12-25T00:00-05:00 [美國/蒙特利爾]

zoneOffsetXmas.toString(): - 05:00

zoneOffsetXmas.getTotalSeconds(): - 18000

ZoneId

正如yanys的評論中所建議的,你可以通過傳遞一個時刻作為ZoneId來查詢ZoneOffset特定的Instant。 Instant類代表UTC時間軸上的一個時刻,分辨率為nanoseconds(小數部分最多九(9)位)。

這只是通往同一目的地的另一條路線。就像上面討論的OffsetDateTime和ZonedDateTime一樣,我們指定(a)時區,(b)片刻。

Instant instant = zdtXmas.toInstant();

ZoneOffset zo = z.getRules().getOffset( instant );

對于ZoneId:美國/蒙特利爾立即:2017-12-25T05:00:00Z ZoneOffset為:-05:00

ZoneOffset.systemDefault - 錯誤或功能?

ZoneOffset類是ZoneId的子類,記錄為繼承systemDefault方法。但是,這實際上并不起作用。

ZoneOffset zoneOffset = ZoneOffset.systemDefault() ; // Fails to compile.

錯誤:不兼容的類型:ZoneId無法轉換為ZoneOffset

不確定這個編譯失敗是錯誤還是功能。如上所述,對于我來說,要求使用日期時間的默認偏移似乎沒有意義,所以也許ZoneOffset.systemDefault確實會失敗。但文檔應該這樣說,并附上解釋。

我試圖提交一個關于文檔無法解決此問題的錯誤,但放棄了,無法確定在何處以及如何提交此類錯誤報告。

About java.time

要了解更多信息,請參閱Oracle Tutorial。并搜索Stack Overflow以獲取許多示例和解釋。規格是JSR 310。

您可以直接與數據庫交換java.time對象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*類。

從哪里獲取java.time類?

Java SE 8,Java SE 9,Java SE 10,Java SE 11和更高版本 - 帶有捆綁實現的標準Java API的一部分。

Java 9增加了一些小功能和修復。

Android

更高版本的Android捆綁java.time類的實現。

對于早期的Android(<26),ThreeTenABP項目適應ThreeTen-Backport(如上所述)。見How to use ThreeTenABP…。

ThreeTen-Extra項目使用其他類擴展了java.time。該項目是未來可能添加到java.time的試驗場。你可能會在這里找到一些有用的類,如Interval,YearWeek,YearQuarter和more。

總結

以上是生活随笔為你收集整理的java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com...的全部內容,希望文章能夠幫你解決所遇到的問題。

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