我正在嘗試獲取 PST 時區一天的開始時間 (00:00:00) 和結束時間 (23:59:59)。我嘗試了以下代碼,但由于某種原因,我只獲得了 UTC 的開始和結束時間。我嘗試更改時區以包含“America/Los_angeles”,但輸出時間戳始終顯示 GMT/UTC 的開始和結束時間。
我的代碼:
val time_zone = ZoneId.of("America/Los_Angeles")
val today_date = LocalDate.now(time_zone).plusDays(0)
val start_time = today_date " " "00:00:00"
val end_time = today_date " " "23:59:59"
val date_format = new SimpleDateFormat("yyyy-MM-dd");
val start_millis = date_format.parse(start_time).getTime();
val end_millis = date_format.parse(end_time).getTime();
start_millis
輸出:
res375: Long = 1656460799000
在紀元轉換器中,1656460799000給了我這個:

我在這里缺少什么嗎?我應該更新任何軟體包等嗎?
uj5u.com熱心網友回復:
java.time
現代方法僅使用java.time類。
無需使用SimpleDateFormat, Date,Calendar和其他可怕的遺留日期時間類。如果需要,您可以通過添加到舊類的新轉換方法來回轉換。
一天的開始
我正在嘗試獲取開始時間(00:00:00)
不要假設一天從 00:00 開始。某些區域中的某些日期從另一個時間開始,例如 01:00。讓java.time使用LocalDate#atStartOfDay.
一天的結束
一天的結束時間 (23:59:59)
使用這種方法,您將錯過一天的最后一秒。
日期時間作業通常使用半開方法完成。在 Half-Open 中,開始是包容的,而結束是排斥的。因此,一天從一天的第一刻開始,一直持續到但不包括第二天的第一刻。
時區
PST 時區。
沒有名為 的時區之類的東西PST。流行媒體使用這種 2-4 個字母的偽時區來指示有關時區的提示。但是這些偽區域沒有標準化,甚至不是唯一的!僅用于向人類進行本地化演示,絕不用于資料存盤或資料交換。
實時時區以 命名Continent/Region。
也許“PST”是指“太平洋標準時間”,通常表示America/Tijuana、 或America/Los_Angeles或America/Vancouver或其他。
或者,“PST”可能是指涵蓋Asia/Manila時區的“菲律賓標準時間”。
示例代碼
捕捉在時區中看到的當前時刻。
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
提取日期。
LocalDate today = zdt.toLocalDate() ;
確定一天的第一時間。
ZonedDateTime zdtStartOfDay = today.atStartOfDay( z ) ;
并確定第二天的第一時刻。
ZonedDateTime zdtStartOfFollowingDay = today.plusDays( 1 ).atStartOfDay( z ) ;
您可能想查看時間長度。并非所有日子都是 24 小時。
Duration d = Duration.between( zdtStartOfDay , zdtStartOfFollowingDay ) ;
Instant通過提取物件將兩個時刻調整為 UTC 。該類代表 UTC 中的一個時刻。
Instant start = zdtStartOfDay.toInstant() ;
Instant end = zdtStartOfFollowingDay.toInstant() ;
對于每一個,獲取自 1970 年第一時刻的紀元參考以來的毫秒數,如 UTC,1970-01-01T00:00Z 所示。
long startMilli = start.toEpochMilli() ;
long endMilli = end.toEpochMilli() ;
但是,我強烈建議不要以毫秒為單位來跟蹤時間。這種方法令人困惑,因為通常使用至少幾十個歷元參考點。并且 along無法被人類讀者解釋,因此錯誤可能會被忽視。
相反,資料存盤和資料交換通常應使用標準ISO 8601格式作為文本進行。java.time類在決議/生成文本時默認使用這些標準格式。
String startText = start.toString() ;
String endText = end.toString() ;
三十-額外
您可能希望將ThreeTen-Extra庫添加到您的專案中。這使您可以訪問Interval該類,將時間跨度表示為一對Instant物件。
Interval allDayLongToday = org.threeten.extra.Interval.of( start , end ) ;
uj5u.com熱心網友回復:
只需將此部分添加到您的代碼中:
date_format.setTimeZone(TimeZone.getTimeZone("PST"));
然后它將按您的意愿作業:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/497334.html
