将日期从一个时区转换为本地时区

时间:2016-04-12 09:17:17

标签: java jodatime

我正在使用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]

有什么方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

1460372400000LMon, 11 Apr 2016 11:00:00 GMTMon, 11 Apr 2016 12:00:00 BST

2016-04-11T11:00:00Z2016-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);