繁体   English   中英

Java/Kotlin 字符串日期到毫秒的转换

[英]Java/Kotlin String Date to milliseconds conversion

我试图弄清楚https://www.epochconverter.com/网站如何将字符串日期转换为毫秒,然后在 Java/Kotlin 代码中复制相同的逻辑。 但我无法想出等效的 Java/Kotlin 代码。

例如,日期“1979/12/31 23:30:00”通过https://www.epochconverter.com/转换为 315552600000 毫秒在此处输入图像描述

但我下面的 kotlin 代码输出 315531000000 而不是 315552600000。

import java.text.SimpleDateFormat
import java.time.*
import java.time.format.DateTimeFormatter
import java.util.*


fun main(){ 
        
    val startTime = "1979/12/31 23:30:00"
    val dateFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
    val startTimeInMillis = dateFormat.parse(startTime).time.toString()
    println(startTimeInMillis)
  
}

上面的代码中是否遗漏了导致不同结果的任何内容?

是的,您错过了时区很重要的事实。 如果您没有指定时区,您的结果将是您在运行代码的计算机的默认时区中指定的日期/时间。

对我来说,纪元转换器网站为“1979/12/31 23:30:00”给出了结果“315549000000”,大概是因为它在浏览器中以 JavaScript 进行转换,而且大概是使用我电脑的时区。

相反,如果我输入“1979/12/31 23:30:00 GMT”,我会得到“315531000000”

因此,如果您希望两者匹配,则需要在纪元转换器中指定时区,并在 Java/Kotlin 代码中使用时区。

例如,如果您在纪元转换器中使用日期字符串“1979/12/31 23:30:00 America/New_York”,则以下代码应该会得到相同的结果:

fun main(){ 
    val startTime = "1979/12/31 23:30:00 America/New_York"
    val dateFormat = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss VV")
    val parsed = ZonedDateTime.parse(startTime, dateFormat);
    println(parsed.toInstant().toEpochMilli())
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM