2014-11-05 109 views
-1

我试图让使用TimeZone.getDefault()的localtimezone,服务器在CST时区运行,但每当我执行下面的代码,我得到的输出为“星期三11月5日, 2014 03:52:22 GMT“但我需要CST的时区。我的代码有问题吗?时区问题

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy hh:mm:ss zzz"); 

Date dtTimeStamp = dateFormat.parse((String) map.get("TimeStamps")); 

SimpleDateFormat dateFormat2 = new SimpleDateFormat("E MMM d, yyyy hh:mm:ss a zzz"); 

TimeZone tzDefault = TimeZone.getDefault(); 

dateFormat2.setTimeZone(tzDefault); 

dateFormat2.format(dtTimeStamp); 
+2

在未来,请[格式化你的代码(http://stackoverflow.com/编辑帮助),使其更具可读性。 – tnw 2014-11-05 16:01:54

+2

这段代码没有输出任何内容,所以你在这里询问的内容并不明显。 – jarnbjo 2014-11-05 16:48:41

回答

0

根据TimeZone.getDefault() JavaDoc

通常情况下,你会得到通过使用getDefault方法TimeZone,这个方法创建基于程序运行的时区时区。

所以,你必须明确提供的TimeZone你想

TimeZone tzDefault = TimeZone.getTimeZone("GMT"); 
+0

目前该程序运行在时区为CST的服务器上,但我的代码正在返回GMT。这就是问题。 – Balu 2014-11-05 16:36:50

+0

Humm,你的服务器和JRE版本是什么? – kumako 2014-11-05 16:46:37

+0

操作系统:Win Server 2008 jre:1.5.0_05 – Balu 2014-11-05 17:08:27

0

如果TimeZone.getDefault()不返回CST,那么你的服务器是不是在CST timzone,或者没有配置为这样。

  • 使用user.timezone属性值设置为默认时区ID(如果可用):

    value returned fromTimeZone.getDefault()由以下因素决定。

  • 检测平台时区ID。平台时区和ID映射的来源可能因实现而有所不同。
  • 使用GMT作为最后的手段,如果给定或检测时区ID是未知的。

您可以检查您的服务器配置,也可以明确地得到CST时区:

TimeZone timeZone = TimeZone.getTimeZone("CST");