簡體   English   中英

如何以 GMT 格式獲取今天的時間戳 - Kotlin

[英]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 小時前

我怎樣才能做到這一點? 謝謝。

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() ; 

另請參閱我對類似問題的回答

ZoneId.systemDefault()更改為 UTC TimeZone

 val timestamp = startOfDay.atZone(ZoneId.of("UTC")).toInstant().epochSecond

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM