我正在使用Java 8并尝试将时间戳从一个时区转换为另一个时区。时间戳将位于用户的时区中,例如
// 2016-04-11T12:00:00Z
long sourceTime = 1460372400000L;
timezoneConverter(sourceTime, "America/New_York");
然而,当使用Joda时间或Java 8 LocalDateTime / Instant时,当我通过时间戳时,它会调整到用户的时区 - 我不需要这样做,因为它已经是在用户的时区(所有时间戳都将在用户的当地时间发送)。
ZonedDateTime zdt =
ZonedDateTime.ofInstant(Instant.ofEpochMilli(1460372400000L),
ZoneId.of("America/New_York"))
结果
2016-04-11T07:00-04:00[America/New_York]
而不是
2016-04-11T12:00-04:00[America/New_York]
有什么方法吗?
谢谢!
答案 0 :(得分:1)
1460372400000L
是Mon, 11 Apr 2016 11:00:00 GMT
或Mon, 11 Apr 2016 12:00:00 BST
2016-04-11T11:00:00Z
为2016-04-11T07:00-04:00[America/New_York]
,因此您将从一个时区转换为另一个时区。
如果您只想要当地时区,建议您使用LocalDateTime
LocalDateTime dt = LocalDateTime.ofEpochSecond(1460376000L, 0 , ZoneOffset.ofHours(0));
System.out.println(dt);
打印
2016-04-11T12:00
答案 1 :(得分:0)
long sourceTime = 1460372400000L;
//Select your timezone
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = new GregorianCalendar(utcTimeZone);
calendar.setTimeInMillis(sourceTime);
//获取当前时区
LocalTime time = LocalTime.now();
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());
System.out.println("Current local time : " + time);