[英]How to get today's timestamp in GMT format - Kotlin
我在下面使用 function 來獲取 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 小時前
我怎樣才能做到這一點? 謝謝。
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() ;
另請參閱我對類似問題的回答。
ZoneId.systemDefault()
更改為 UTC TimeZone
val timestamp = startOfDay.atZone(ZoneId.of("UTC")).toInstant().epochSecond
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.