2012-05-16 22 views
4

我在文档和谷歌发现的众多与时间相关的问题之间迷失了方向。在“+0100”(例如)格式中获得时区

我要的很简单:代表在 运行时区字符串“[+/-] [数字] [数字] [数字] [数字]” 格式(例如“+0100”) 。

我当前的代码是:

Calendar cal = Calendar.getInstance(); 
    TimeZone tz = cal.getTimeZone(); 
    String gmt = "" + tz.getID(); 

返回“GMT”在我的位置,我以为是时区的短版(3个字母)。

回答

7

这是我真正结束了使用的代码,我希望它可以帮助别人。

Date today = Calendar.getInstance().getTime(); 
SimpleDateFormat sdf = new SimpleDateFormat("Z"); 
String gmt = sdf.format(today); 
1

好像要在SimpleDateFormat的

 
Z Time zone RFC 822 time zone -0800 
X Time zone ISO 8601 time zone -08; -0800; -08:00 
+0

我真的很喜欢你的方法,但如果你给我看了一些其他的代码,它本来会很好。我将在答案中添加当前的代码。 – Cath

3

“Z” 或 “X” 你应该试试下面的事情。

Calendar c = Calendar.getInstance(); 
     System.out.println("current: " + c.getTime()); 

     TimeZone z = c.getTimeZone(); 
     int offset = z.getRawOffset(); 
     if (z.inDaylightTime(new Date())) { 
      offset = offset + z.getDSTSavings(); 
     } 
     int offsetHrs = offset/1000/60/60; 
     int offsetMins = offset/1000/60 % 60; 

     System.out.println("offset: " + offsetHrs); 
     System.out.println("offset: " + offsetMins); 

     c.add(Calendar.HOUR_OF_DAY, (-offsetHrs)); 
     c.add(Calendar.MINUTE, (-offsetMins)); 

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

     System.out.println("GMT Time: " + sdf.format(c.getTime()) + " +" 
       + offsetHrs + ":" + offsetMins); 

输出

current: Wed May 16 22:32:14 IST 2012 
offset: 5 
offset: 30 
GMT Time: 2012-05-16 17:02:14 +5:30 
+0

谢谢你的快速回答。其实我不需要日期(这是用户在图形请求的上下文中定义的),只需要格林尼治标准时间代码。 :)但我有一个问题:如果时区为“负数”会怎么样? – Cath

+0

然后它将以负格式显示。你可以从'offsetHrs'和'offsetMins'获得时区值。 –

+0

接受答案,如果你喜欢... :) :) :) –