android:“欧洲/俄罗斯”的时区偏移量

时间:2014-02-08 19:04:13

标签: android time timezone

我需要一个“欧洲/俄罗斯”的偏移量,以UTC为单位。这是我的代码:

Calendar mCalendar = new GregorianCalendar();
mCalendar.setTimeZone( TimeZone.getTimeZone("Europe/Moscow"));
TimeZone mTimeZone = mCalendar.getTimeZone();  
int remote_offset = mTimeZone.getRawOffset()/1000/60/60;

对于UTC,它应该是-4小时。但!一些用户有3个小时的差异!!

我认为,问题是,俄罗斯不使用冬季时间。现在有些设备,但有些设备没有..我怎么能实现所有的“-4”小时?

此致

1 个答案:

答案 0 :(得分:3)

首先,俄罗斯不是UTC-4。

问题与俄罗斯没有夏令时有关。但你的问题可能只发生在android 2.x设备上而且更少。据我记得的那样,在4.x之前删除了夏令时(如果它是用户输入的话)。另一方面,如果您收到设备在没有用户输入的情况下创建的日期,则不必将其转换为已经为UTC的日期。

但正如我所说,俄罗斯不是-4。俄罗斯/莫斯科将是+4小时。但俄罗斯真的比莫斯科大!

请看这里:http://en.wikipedia.org/wiki/Time_in_Russia

UTC+03:00   MSK−1: Kaliningrad Time    Europe/Kaliningrad
UTC+04:00   MSK:   Moscow Time         Europe/Moscow, Europe/Volgograd, Europe/Samara
UTC+06:00   MSK+2: Yekaterinburg Time  Asia/Yekaterinburg
UTC+07:00   MSK+3: Omsk Time           Asia/Omsk, Asia/Novosibirsk, Asia/Novokuznetsk
UTC+08:00   MSK+4: Krasnoyarsk Time    Asia/Krasnoyarsk
UTC+09:00   MSK+5: Irkutsk Time        Asia/Irkutsk
UTC+10:00   MSK+6: Yakutsk Time        Asia/Yakutsk
UTC+11:00   MSK+7: Vladivostok Time    Asia/Vladivostok, Asia/Sakhalin
UTC+12:00   MSK+8: Magadan Time        Asia/Magadan, Asia/Kamchatka, Asia/Anadyr

所以你要做的就是检查我们是否在冬天,而TimeZone就是其中之一。如果时区是其中之一,则可以在要显示时再添加一个小时。如果要转换为UTC,请删除1小时。

我不相信有可能在Android手机上更新TimeZone,这也意味着除非您为日期内置时区并且已更新的日期找到替代库,否则不可能这样做。 / p>

您可以使用您使用的函数将DateObject子类化为旧日期对象,您所要做的就是确保它在android2.x上的行为不同,而不是在android 4.x +上。< / p>

同时检查:http://www.joda.org/joda-time/

我在那里查了一下,我猜它可能比上面我的建议更有用而且更少hacky。 TimeZones是最新的,因此它可以适用于每部手机,因为它不应使用内部时区。另一方面,如果你有需要日期的函数,它可能会变得棘手。

我的建议是确保你在任何地方使用UTC并使用JodaTime格式化带有时区的日期并进行“日期时间”操作。如果确保Java Date不包含UTC以外的TimeZone。它应该工作。