Joda time给出了不正确的时区时间



我正在Android中创建一个微调器,然后获得微调器的值,并试图找出时区ID中的本地时间。

在下面的示例中,timeZoneID是时区ID的字符串表示形式。"America/Chicago"等

            DateTimeZone tz = DateTimeZone.forID(timeZoneID);
            DateTime now = DateTime.now(DateTimeZone.forID(timeZoneID));
            DateTime localTime1 = now.toDateTime(tz);
            float minuteRotation = localTime1.getMinuteOfDay() / 30f * (float) Math.PI;
            float hourRotation = ((localTime1.getHourOfDay() + localTime1.getMinuteOfDay() / 60f) / 6f) * (float) Math.PI;

然而,问题是时区的本地时间总是错误的。例如,如果PST时间应该是晚上8点,那么我从上面的代码中得到的结果是下午5点。

所有的时区ID都是正确的,并且是从Joda time本身获得的,它被填充在下面的spinner中:

        Set<String> zoneIds = DateTimeZone.getAvailableIDs();
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");
        ArrayList<String> TZ1 = new ArrayList<String>();
        for(String zoneId:zoneIds) {
            TZ1.add("("+dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0) +") "+zoneId+", "+TimeZone.getTimeZone(zoneId).getDisplayName());
        }
        for(int i = 0; i < TZ1.size(); i++) {
            adapter.add(TZ1.get(i));
        }
        final Spinner TZone = (Spinner)findViewById(R.id.TimeZoneEntry);
        TZone.setAdapter(adapter);
        for(int i = 0; i < TZ1.size(); i++) {
            if(TZ1.get(i).equals(TimeZone.getDefault().getDisplayName())) {
                TZone.setSelection(i);
            }
        }

问题:为什么我从Joda时间得到不正确的当地时间?我绞尽脑汁想弄明白这个问题。

以下代码作为测试报告我的时区设置的正确本地时间:

@Test
public void timeTest()
{
    String timeZoneID = "Europe/Berlin";
    DateTimeZone tz = DateTimeZone.forID(timeZoneID);
    DateTime now = DateTime.now(DateTimeZone.forID(timeZoneID));
    DateTime localTime1 = now.toDateTime(tz);
    System.err.println(localTime1 + " " + localTime1.getZone().getID() + " Default: " + TimeZone.getDefault().getID());
}

当前设置不应该是PDT而不是PST吗?"America/Chicago"距离太平洋时间还有3小时

相关内容

  • 没有找到相关文章

最新更新