java - 为什么 Joda Time 报告错误的时区偏移量,而 Android Java Api 返回正确的偏移量?

标签 java android jodatime

我将 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/

相关文章:

android - 为 AVD Manager 指定 android api 的位置

java - 使用我自己在 OpenCV 中的公式将 RGB 转换为灰度

java - 比较两个 joda DateTime 实例

android - 获取特定日期和时间的 3 个字母的时区缩写

java - 从 URL 中提取项目名称

java - CDI JPA 通用 Dao

java - 手机应用程序崩溃

Java jTable 在 jScrollPane 内不可见

java - super 在方法声明中的用法

java - 为什么 Joda 即时扩展原始类型 Comparable?