如何以 GMT 格式获取今天的时间戳 - Kotlin

How to get today's timestamp in GMT format - Kotlin

我正在使用以下函数在 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

GMT: Wednesday, 15 December 2021 18:30:00

Your time zone: Thursday, 16 December 2021 00:00:00 GMT+05:30

Relative: 11 hours ago

但是时间戳应该是1639612800

GMT: Thursday, 16 December 2021 00:00:00

Your time zone: Thursday, 16 December 2021 05:30:00 GMT+05:30

Relative: 5 hours ago

我怎样才能做到这一点?谢谢

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 时区

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