安卓:"Europe/Russia"的时区偏移量



我需要将"欧洲/俄罗斯"偏移到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"小时?

问候

首先,俄罗斯不是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

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

我认为不可能在安卓手机上更新时区,这也意味着,除非你找到一个内置时区并更新的日期替代库,否则不可能做到这一点。

你可以用你用来表现得像旧日期对象一样的函数来划分DateObject的子类,你所要做的就是确保它在android2.x上的表现不同,而不是在android 4.x+.上

还要检查以下内容:http://www.joda.org/joda-time/

我在那里检查了一下,我想它可能比我上面的建议有用,也不那么粗糙。时区是最新的,所以它可以适用于每部手机,因为它不应该使用内部时区。另一方面,如果您的函数需要Date,则可能会变得棘手。

我的建议是,确保在任何地方都使用UTC,并使用JodaTime用时区格式化日期,并执行"datetime"操作。如果您确保Java日期从不包含UTC以外的时区。它应该起作用。

相关内容

  • 没有找到相关文章

最新更新