2014-03-12 39 views
2

下面的代码比我通过的时间少了一天,为什么它少于一天返回“Fri Aug 27 13:00:00 PDT 2010”。日期时间问题,少返回一天

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Locale; 
import java.util.TimeZone; 

    Locale locale = new Locale("en", "US"); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", locale); 
    TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT-4"); 

    dateFormat.setTimeZone(timeZone); 

    System.out.println(dateFormat.parse("2010-08-28")); 
+0

http://stackoverflow.com/questions/18122608/simpledateformat-parse-loses-timezone – ray

+0

此线程有同样的问题。 http://stackoverflow.com/questions/17581112/java-simpledateformat-timezone-parsing – edubriguenti

回答

0

看看时间Fri Aug 27 13:00:00 PDT 2010?现在是美国太平洋时间13:00,所以我建议你使用目标时区的专用SimpleDateFormat打印...

4

奇怪输出的原因是您的系统时区。

例如,我的系统上我与UTC+2工作,你的代码打印

Fri Aug 27 23:00:00 BST 2010 

如果我更改系统时区UTC我得到

Fri Aug 27 21:00:00 BST 2010 

这提出了两个小时的时差在输出中。

那么,什么似乎发生的是,在UTC-4日期00:00, 28 Aug 2010计算到在系统设置中指定,然后在终端打印的时区。

+0

谢谢你的答案,但有什么用解析时区的timeZone = TimeZone.getTimeZone(“ETC/GMT-时设置时区4" ); dateFormat.setTimeZone(timeZone); – user3157090

+0

查看我的更新回答。 –

+0

由于夏季时间2010年8月27日,它会打印21:00而不是20:00 – kai

1

输出将取决于您的系统的时区。您所分析的内容基本上是GMT-4时区的2010-08-28 00:00:00。当你打印它时,它会显示你的系统时区。