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