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

时间:2015-02-04 23:49:13

标签: java simpledateformat

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

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

2 个答案:

答案 0 :(得分:1)

java.util.Date对象没有时区信息。这是一个固定的时间点。转储到控制台只使用Date.toString();,它使用JVM的时区来执行格式化。如果您想要将固定的即时时间转换回特定时区的“人工”表示,请通过格式化板以其他方式将其发回。

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

答案 1 :(得分:0)

我建议你使用joda time librairy。这个API包含一些漂亮的类来实现你愿意做的事:DateTimeFormat,DateTimeZone ......在我看来,它是java中最好的日期API。

javadoc非常详尽,网上有很多例子(当然包括stackoverflow)。

来源:

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