[英]Java date is not preserving milliseconds in conversion with simple date format
[英]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.