我将 Joda Time 纳入我的 Android 项目中,以便能够使用更新的时区信息。
不幸的是,我收到孟加拉国用户的报告,称时区偏移计算不正确。
在模拟器上测试它,我也得到了不正确的偏移量。使用标记 -timezone Asia/Dhaka
运行 Android 模拟器后,我在我的应用程序中看到以下内容:
使用普通 Java API 报告时区偏移
TimeZone zone = TimeZone.getDefault();
String zoneName = zone.getDisplayName(daylight, TimeZone.SHORT);
int millisOffset = zone.getOffset(System.currentTimeMillis());
=> Asia/Dhaka, Offset +6 hours
使用 Joda 时间库报告
DateTime today = new DateTime();
String name = today.getZone();
int millisOffset = today.getZone().getOffset(today.getMillis());
=> Asia/Dhaka, Offset +7 hours
我有什么遗漏吗?
最佳答案
为了让 Joda 给出正确的偏移量,您必须提供一个日期时间瞬时值。如果没有日期时间瞬时值,则无法计算偏移量,因为我们有不同的偏移量(夏令时)。这就是我如何使用 Joda 获取 + HH:mm 格式的偏移量:
int offsetInMillis = DateTimeZone.forID(zoneId).getOffset(new DateTime().getMillis());
String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000),
Math.abs((offsetInMillis / 60000) % 60));
offset = (offsetInMillis >= 0 ? "+" : "-") + offset;
关于java - 为什么 Joda Time 报告错误的时区偏移量,而 Android Java Api 返回正确的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639304/