2015-02-08 60 views
1

在下面的代码中,我试图获取时区PST的dateformat,但我没有得到预期的输出。 但是,如果我取消注释2行(setDefault时区),我会得到预期的结果。Java - 没有得到一个特定时区的时间戳

你有什么好的选择吗?

System.out.println("TimeZone.getDefault():"+TimeZone.getDefault()); // CST 
    //TimeZone.setDefault(TimeZone.getTimeZone("PST")); 
    Calendar cal = java.util.Calendar.getInstance(SimpleTimeZone.getTimeZone("PST")); 
    //Calendar cal = java.util.Calendar.getInstance(); 
    Date c = cal.getTime(); 
    String out = new java.text.SimpleDateFormat("MMMMMddyyyy").format(c); 
    System.out.println("out:"+out); 

如果CST当前日期是February082015(晚上12到上午02点),那么对于PST预期输出将是February072015(PST是2小时后面CST)。但是,我得到的输出截止日期为二零一五年二月。

+0

预期结果是什么?你得到的结果是什么? – sashwat 2015-02-08 05:22:17

+0

如果CST中的当前日期是2015年2月8日(晚上12点到凌晨1点),那么PST的预期产出将为2015年2月7日(PST为CST后2小时)。但是,我得到的输出截止日期为二零一五年二月。 – 2015-02-08 05:25:11

回答

1

您的DateFormat不会从Calender继承TimeZone。为了演示,我添加了一个Z(它将显示时区偏移量)。运行它并且没有设置TimeZone并且您的观察行为被解释为

DateFormat df = new SimpleDateFormat("MMMMMddyyyy Z"); // <-- The Z is TZ 
df.setTimeZone(SimpleTimeZone.getTimeZone("PST")); // <-- Add/Remove this 
String out = df.format(c); 
+0

Thx回复。其实,我不想改变格式。如果我运行上述操作,我会输出“February082015 -0600”作为输出。 – 2015-02-08 06:06:16

+0

这就是PST。然后删除Z. – 2015-02-08 06:08:13

+0

我没有注意到在dateformat对象上设置的时区。 – 2015-02-08 06:11:52

相关问题