欧洲/莫斯科时区的错误时间超过1小时

时间:2014-11-13 11:38:04

标签: java timezone

对于我们的俄罗斯租户,我们正在使用"欧洲/莫斯科"时区。但是我们在正确的时间提前1小时得到时间。

欧洲/莫斯科是UTC + 3小时。但是当我在欧洲/莫斯科时区形成的打印日期比正确时间提前1小时。

谢谢, Syamala。

4 个答案:

答案 0 :(得分:4)

我注意到2014年10月有一个legislative change俄罗斯时区定义;可能你的JRE根本就不知道它。

Java Timezone Updater Utility应该能够为您解决这个问题。随着时间的推移,更新的时区定义最终也应该默认包含在较新的JRE中(尽管现在无法帮助您)。

答案 1 :(得分:3)

你可以使用joda-time api,版本需要大于2.5。因为joda-time api会在俄语时区从2.5版更改后更新时区数据库。

Date timestamp = sdf.parse("11/17/2014 06:13:19");

TimeZone timezone = TimeZone.getTimeZone("Europe/Moscow");

DateTimeZone tz = DateTimeZone.forTimeZone(timezone);

DateTime jodaDateTime = new DateTime(timestamp, tz);

System.out.println(jodaDateTime.hourOfDay().get());

答案 2 :(得分:2)

Java 8:

 System.out.println(LocalDateTime.now(ZoneId.of("Europe/Moscow"))
            .format(DateTimeFormatter.ofPattern("d.MM.yyyy 'um' HH:mm 'Uhr'")));

答案 3 :(得分:0)

尝试三十岁

import org.threeten.bp.format.*
import org.threeten.bp.*



 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = dtf.format(ZonedDateTime.ofInstant(Instant.ofEpochMilli(MILLISECONDS_VALUE_HERE), ZoneId.of("Europe/Moscow"));