如何解决日期和时间到Unix时间戳的转换-Kotlin
在 timestamp 变量中,我想获取带有当前小时,分钟和秒的时间戳值。 currentDataTime以以下格式给我时间: 2020-08-28 17:18:02 。 当前, timestamp 变量返回我 1598645882634 (最后3个数字是毫秒),但是当我将其以在线形式转换为人类可读格式时,它给了我 08/28/2020 @ 8:18 pm(UTC)。唯一的问题是,由于我所在的区域,小时和分钟tha相差3个小时。如何将日期和时间转换为时间戳?
object DateTime {
val currentDataTime: String
@SuppressLint("SimpleDateFormat")
get() {
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
return dateFormat.format(Date())
}
val timestamp: String
get(){
val formatter: DateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val date = formatter.parse(currentDataTime) as Date
return date.time.toString().dropLast(3) //it is returning
}
}
解决方法
Unix timestamp被定义为(almost)UTC。它不包含任何时区信息,因此,如果没有基于时区的信息全部分解,就无法根据时区差异进行移动。 (如果您仍然想对其进行硬连线,则根据您的示例,只需添加以毫秒为单位的时区差即可。但是请继续阅读。)
只要附有正确的时区,本地化时间就只能保持一致。每当夏时制开始或结束时,它就会来回跳跃。如果还不够复杂的话,夏时制的规则可能会随时更改(并且全球范围内也会如此)。
您的在线转换器显然只是采用了基于UTC的时间戳,并根据您当地的时区进行显示。
要处理本地化的日期和时间值,请使用多平台日期/时间库kotlinx-datetime。在README部分Converting an instant to local date and time components中,您将找到以下示例:
val currentMoment: Instant = Clock.System.now()
val datetimeInUtc: LocalDateTime = currentMoment.toLocalDateTime(TimeZone.UTC)
val datetimeInSystemZone: LocalDateTime = currentMoment.toLocalDateTime(TimeZone.currentSystemDefault())
您还将找到有关在哪种情况下使用哪种日期和时间的详尽说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。