如何在正确的时区 java 中解析时间?

How to parse time in correct timezone java?

我正在解析一个时间戳,它是一个字符串,如下所示:

Date receivedDateObj = new Date();
String inputDate = "Fri, 31 Dec 1999 23:59:59";
SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
                try {
                    System.out.println(inputDate);
                    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
                    receivedDateObj = formatter.parse(inputDate);
                }catch (ParseException e) {

                }
System.out.println(receivedDateObj);

日期被正确解析,但是当我打印日期时,它打印出以下内容:

Fri Dec 31 18:59:59 EST 1999

如何让它打印 GMT 而不是 EST?为什么尽管我使用以下设置时区仍未设置?

formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

一个java.util.Date对象没有时区信息。这是一个固定的时间点。转储到控制台只使用 Date.toString(); ,它使用 JVM 的时区来执行格式。如果您想将固定的即时时间转换回特定时区的 'human' 表示,只需通过格式化程序以另一种方式将其发回即可。

System.out.println(formatter.format(receivedDateObj));

我建议你使用 joda 时间库。此 API 包含一些漂亮的 类 来实现您愿意做的事情:DateTimeFormat、DateTimeZone...在我看来,这是 java 中最好的日期 API。

java文档非常详尽,网上有很多示例(当然包括 Whosebug)。

来源:

http://www.joda.org/joda-time/

http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTimeZone.html

http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html