如何显示具有自定义时区的日期?

2022-09-03 18:32:35

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

“星期三 七月 08 17:08:48 GMT 2009”

因此,我将该字符串解析为日期对象,如下所示:

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);

答案 1

使用“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));
    }
}

输出: 星期三 七月 08 12:08:48 CDT 2009


答案 2

用:

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

输出:

Wed Jul 08 12:08:48 CDT 2009

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