gpt4 book ai didi

android 时区差异比预期少 1 小时

转载 作者:搜寻专家 更新时间:2023-11-01 08:00:43 25 4
gpt4 key购买 nike

我需要的是特定时区(“俄罗斯/莫斯科”)与用户本地时间之间的时差,差异应以小时为单位。

我遇到时区差异有时计算错误的问题。我计算了 android 设备到 UTC 的本地偏移量和到 UTC 的远程偏移量之间的差异(以小时为单位)。对于大多数用户来说,这很好......但许多用户提示这个问题......我无法在我的手机或模拟器上重现它。“错误”显示的时差总是少了 1 小时。在莫斯科是 15:00,在欧洲是 12:00。但是用户看到 2 小时的偏移量这是我的代码。

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

Calendar mCalendar2 = new GregorianCalendar();
TimeZone mTimeZone2 = mCalendar2.getTimeZone();
int local = mTimeZone2.getRawOffset()/1000/60/60;

return local - remote;

最佳答案

您犯了将时区等同于时区偏移的常见错误。他们是两个不同的东西。请阅读timezone tag wiki .

当您调用 getRawOffset 时,会返回该时区的标准 偏移量。要获取在特定时间点有效的偏移量,您可以使用 getOffset,它采用您正在谈论的时间点的时间戳参数。

考虑以下代码,它返回当前有效的差异:

long now = System.currentTimeMillis();

String tz = "Europe/Moscow";
TimeZone mTimeZone = TimeZone.getTimeZone(tz);
int remote = mTimeZone.getOffset(now);

TimeZone mTimeZone2 = TimeZone.getDefault();
int local = mTimeZone2.getOffset(now);

double differenceInHours = (local - remote) / 3600000.0;

return differenceInHours;

注意一些事情:

  • 我不需要 Calendar 类。
  • 偏移量都针对同一个“现在”。根据运行时间的不同,您会得到不同的结果。
  • 并非所有偏移量都使用整数小时,因此此函数应返回 double,而不是 int。例如,尝试 Asia/Kolkata,它全年使用 UTC+5:30,或者 Australia/Adelaide,它在 UTC+9:30 和 UTC+10 之间交替:30.

也考虑使用 Joda-Time ,这是一种在 Java 中处理时间的更强大的方式。

关于android 时区差异比预期少 1 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21646807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com