14

假设我有一个代表日期的字符串,如下所示:

“格林威治标准时间 2009 年 7 月 8 日星期三 17:08:48”

所以我将该字符串解析为这样的日期对象:

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy");
Date fromDate = (Date)formatter.parse(fromDateString);

这给了我正确的日期对象。现在我想将此日期显示为 CDT 值。

我已经尝试了很多事情,但我无法让它正常工作。必须有一个使用 DateFormat 类的简单方法才能使其工作。有什么建议吗?我最后一次尝试是这样的:

formatter.setTimeZone(toTimeZone);
String result = formatter.format(fromDate);
4

4 回答 4

19

使用“zzz”而不是“ZZZ”:“Z”是 RFC822 时区的符号。

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

话虽如此,我对日期/时间的标准建议是使用Joda Time,这是一个更好的 API。

编辑:简短但完整的程序:

import java.text.*;
import java.util.*;

public class Test
{
    public List<String> names;

    public static void main(String [] args)
        throws Exception // Just for simplicity!
    {
        String fromDateString = "Wed Jul 08 17:08:48 GMT 2009";
        DateFormat formatter = new SimpleDateFormat
            ("EEE MMM dd HH:mm:ss zzz yyyy");
        Date fromDate = (Date)formatter.parse(fromDateString);
        TimeZone central = TimeZone.getTimeZone("America/Chicago");
        formatter.setTimeZone(central);
        System.out.println(formatter.format(fromDate));
    }
}

输出:2009 年 7 月 8 日星期三 12:08:48 CDT

于 2009-07-22T16:33:44.430 回答
4

使用:

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

输出:

Wed Jul 08 12:08:48 CDT 2009

对于您在我的机器上的示例中的日期。那是在格式字符串中用 zzz 代替 ZZZ 之后。

于 2009-07-22T19:11:35.687 回答
3

抱歉挖了一个旧线程。但我想知道是否有一个 java-class 将所有 time-zone-ids 保存为一个常量类。因此,不必在像这样设置时区时对时区 ID 进行硬编码:

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

相反,我们会做一些更标准/统一的事情:

formatter.setTimeZone(TimeZone.getTimeZone(SomeConstantClass.US_CENTRAL)); 

其中 SomeConstantClass.java 是一个类,其中包含引用 TimeZone 类支持的不同时区 ID 的常量。

于 2013-05-09T18:48:33.727 回答
1
于 2016-10-12T04:30:37.997 回答