日期和时间到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())

您还将找到有关在哪种情况下使用哪种日期和时间的详尽说明。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...