我有两个作为毫秒的时间戳,它们是在不同的时区中创建的,不能转换为相同的时区。
Date_1 = 1525694035615 - Mon May 07 2018 11:53:55
Date_2 = 1525686835730 - Mon May 07 2018 09:53:55有没有人知道如何在UTC+0中识别时区和获取值?
当我转换这些时间戳时,总是得到这些时间戳具有时区+0的值。
发布于 2018-05-07 15:51:08
有没有人知道如何…?在UTC+0中获取值吗?
我首先要做的是:
OffsetDateTime dateTime = Instant.ofEpochMilli(1_525_694_035_615L)
.atOffset(ZoneOffset.UTC);
System.out.println(dateTime);这些指纹:
2018-05-07T11:53:55.615Z
这与你在问题中所说的一致。Z在结尾的意思是UTC。
…如何识别时区…
我们不太可能。如果您知道时间戳在产生时间戳的时区对应的时间,我们可以计算偏移量。当答案是UTC时,这是相当无聊的,所以我举一个不同的例子:
long timestamp = 1_525_708_128_067L;
LocalDateTime dateTimeInUnknownTimezone = LocalDateTime.of(2018, Month.MAY, 7, 18, 48, 48);
LocalDateTime utcDateTime = Instant.ofEpochMilli(timestamp)
.atOffset(ZoneOffset.UTC)
.toLocalDateTime()
.truncatedTo(ChronoUnit.SECONDS);
int offsetInSeconds = (int) ChronoUnit.SECONDS.between(utcDateTime, dateTimeInUnknownTimezone);
ZoneOffset offset = ZoneOffset.ofTotalSeconds(offsetInSeconds);
System.out.println(offset);+03:00
由于日期-时间只有秒的精度,我也截断UTC的时间到秒,以获得偏移的精确。但是,从+03:00的偏移量中,我们无法明确地确定时区,因为许多时区使用此偏移量。
发布于 2018-05-07 13:54:19
如果您用Java创建的毫秒时间戳是,则始终是的毫秒
1970年1月1日午夜协调世界时
也没有时区的东西。
你所看到的:
2018年5月7日星期一11:53:55 2018年5月7日星期一09:53:55
仅用字符串表示当前JVM/计算机时区中的时间中的那些时刻
如果您需要在UTC时区中有一个字符串表示形式,那么有很多类可以这样做。在所有JDK中都有日历实现(例如GregorianCalendar)。Java 8中有来自Joda time的新API。
在处理时区时,它应该能更好地工作。
发布于 2018-05-07 13:30:08
如果您获得timezone+0,这是因为这是默认的时区,给定任意数量的固定时间(在您的示例中为毫秒)。如果你想要一个不同的时区UTC+0,你必须告诉它你在哪个时区。
https://stackoverflow.com/questions/50215424
复制相似问题