我正在使用以下函式在 kotlin-Android 中獲取今天的開始時間戳。
fun getTimeStampForStartOfTheDay(): String {
val localDate = LocalDate.now() // your current date time
val startOfDay: LocalDateTime = localDate.atStartOfDay() // date time at start of the date
val timestamp = startOfDay.atZone(ZoneId.systemDefault()).toInstant()
.epochSecond // start time to timestamp
return timestamp.toString()
}
我得到的時間戳是:1639593000
格林威治標準時間:2021 年 12 月 15 日,星期三 18:30:00
您所在的時區:2021 年 12 月 16 日星期四 00:00:00 GMT 05:30
親戚:11 小時前
但是時間戳應該是1639612800
格林威治標準時間:2021 年 12 月 16 日星期四 00:00:00
您所在的時區:2021 年 12 月 16 日星期四 05:30:00 GMT 05:30
親戚:5 小時前
我怎樣才能做到這一點?謝謝。
uj5u.com熱心網友回復:
更改ZoneId.systemDefault()為 UTC 時區
val timestamp = startOfDay.atZone(ZoneId.of("UTC")).toInstant().epochSecond
uj5u.com熱心網友回復:
tl;博士
LocalDate.now( z ).atStartOfDay( z ).toInstant().getEpochSecond() ;
細節
我不確定您的代碼出了什么問題,但這似乎是時區問題。
另一個問題是您隱式依賴 JVM 的當前默認時區。任何應用程式的任何執行緒中的任何代碼都可以隨時更改該默認值。因此,最好指定您想要或預期的時區。或者至少捕獲一次默認值并重用,而不是多次訪問當前默認值。
并且您的代碼過度勞累,跳過了不必要的圈套。
在 Java 語法中:
ZoneId z = ZoneId.systemDefault() ; // Or specify: ZoneId.of( "Asia/Kolkata" ) ;
LocalDate today = LocalDate.now( z ) ;
ZonedDateTime startOfToday = today.atStartOfDay( z ) ;
Instant instant = startOfToday.toInstant() ;
long countOfSecondsSinceEpochReference = instant.getEpochSecond() ;
另請參閱我對類似問題的回答。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382524.html
