提问人:Rohan 提问时间:9/6/2023 最后编辑:Federico klez CullocaRohan 更新时间:9/7/2023 访问量:77
将长格式的时间从UTC到EST
Convert time in long format from UTC to EST
问:
寻找将时间(毫秒)从UTC转换为EST 以以下方式尝试,但没有奏效。我看到epcohET与输入参数相同。
long time = 1693932120000
Instant dateTime = Instant.ofEpochMilli(time);
ZoneId usET = ServerTimeZone.TimeZone.getTimeZone("America/New_York").toZoneId();
ZonedDateTime zdt = ZonedDateTime.ofInstant(dateTime, usET);
long epochET = zdt.toInstant().toEpochMilli();
答:
3赞
Arvind Kumar Avinash
9/6/2023
#1
即时
仅表示某个时刻,与时区无关。
您可以使用 Instant#atZone
来获得所需的结果。
演示:
class Main {
public static void main(String[] args) {
long timestamp = 1693932120000L;
Instant instant = Instant.ofEpochMilli(timestamp);
ZonedDateTime zdt = instant.atZone(ZoneId.of("America/New_York"));
System.out.println(zdt);
}
}
输出:
2023-09-05T12:42-04:00[America/New_York]
从 Trail 了解新式日期时间 API:日期时间
评论
0赞
Rohan
9/6/2023
我预计输出也会很长。但我的理解是,长将与输入相同,不会改变。
1赞
Arvind Kumar Avinash
9/6/2023
@Rohan没错。时间戳与时区无关。如果您想了解与日期时间相关的概念,我在回答中链接的文档和教程将对您非常有帮助。long
1赞
WJS
9/6/2023
#2
那么有没有其他方法可以将长时间从UTC转换为ET(不使用ZonedDateTime)?
如果你说的是从一个多头到另一个多头,不。时刻和纪元没有时区(尽管被视为用于调整目的)。TZ
Instant
Zulu
如果您只想获取一个时间对象并且不关心信息,而只想针对某些对象进行调整,这将起作用。如果要包含在输出中,只需将调用替换为 Try it like this,但使用您的特定区域。请注意,如果打印出 ,则默认为 或 。因此,任何调整都将从这一点开始。timezone
long milli
timezone
LocalDateTime
timezones
LocalDateTime
ZonedDateTime
Instant
Zulu
UTC
TZ
Long millis = 1694009579442L;
Instant instant = Instant.ofEpochMilli(millis);
LocalDateTime ldt1 = LocalDateTime.ofInstant(instant,
ZoneId.of("US/Eastern"));
LocalDateTime ldt2 = LocalDateTime.ofInstant(instant,
ZoneId.of("Europe/Paris"));
System.out.println(ldt1);
System.out.println(ldt2);
指纹
2023-09-06T10:12:59.442
2023-09-06T16:12:59.442
评论
Continent/Region
America/New_York
America/Montreal