0

我的情况是我有一个 Date obj,里面的日期是 UTC 时间。但是我希望将其更改为日本时间。

    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Japan"));
    calendar.setTime(someExistingDateObj);
     System.out.println(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)) + ":" + calendar.get(Calendar.MINUTE));

existingDateObj 是从 db 映射的,db 值为 2013-02-14 03:37:00.733

04:37

似乎时区不起作用?

谢谢你的时间....

4

2 回答 2

0

sdf2 和 sdf3 是同等初始化的,所以不需要它们中的两个。

于 2013-02-14T03:27:17.127 回答
0

你的问题可能是你看错了。ADate没有时区。它代表一个离散的时刻,“旨在反映协调的世界时间”。日历和日期格式化程序是获取时区信息的内容。您使用 Calendar 和 TimeZone 实例的第二个示例似乎工作正常。现在,这段代码:

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Japan"));
    System.out.println(String.valueOf(calendar.get(Calendar.HOUR)) + ":" + calendar.get(Calendar.MINUTE));
}

报告:

0:32

这对我来说似乎是正确的。你觉得它有什么问题?

更新:哦,也许你期待12:32上面的代码?你会想要使用Calendar.HOUR_OF_DAY而不是Calendar.HOUR,或者做一些小时数学。Calendar.HOUR 使用 0 来表示中午和午夜。

更新 2:这是我试图解决这个问题的最后一次尝试。试试这个代码:

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("H:mm a Z");
    List<TimeZone> zones = Arrays.asList(
            TimeZone.getTimeZone("CST"),
            TimeZone.getTimeZone("UTC"),
            TimeZone.getTimeZone("Asia/Shanghai"),
            TimeZone.getTimeZone("Japan"));
    for (TimeZone zone : zones) {
        calendar.setTimeZone(zone);
        format.setTimeZone(zone);
        System.out.println(
                calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE) + " "
                + (calendar.get(Calendar.AM_PM) == 0 ? "AM " : "PM ")
                + (calendar.get(Calendar.ZONE_OFFSET) / 1000 / 60 / 60));
        System.out.println(format.format(calendar.getTime()));
    }
}

请注意,它创建了一个 Calendar 对象,表示“现在”。然后,它使用 Calendar.get() 方法和 SimpleDateFormat 打印出该日历在四个不同时区表示的时间,以表明两种方式都获得了相同的结果。现在的输出是:

22:59 PM -6
22:59 PM -0600
4:59 AM 0
4:59 AM +0000
12:59 PM 8
12:59 PM +0800
13:59 PM 9
13:59 PM +0900

如果您使用 Calendar.HOUR 而不是 Calendar.HOUR_OF_DAY,那么您会看到:

10:59 PM -6
22:59 PM -0600
4:59 AM 0
4:59 AM +0000
0:59 PM 8
12:59 PM +0800
1:59 PM 9
13:59 PM +0900

它分别以中央标准时间(我的时区)、UTC、上海时间和日本时间正确显示当前时间,以及它们的时区偏移量。您可以看到它们都排成一行并具有正确的偏移量。

于 2013-02-14T03:31:32.777 回答