从日期获取TimeZone实例

时间:2013-04-29 09:44:43

标签: java

使用以下代码 -

    Timestamp ts = (Timestamp)results.get(0);
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
    System.out.println(sdf.format(new Date(ts.getTime())));

我输出为:04/29/2013 15:08:30 +0530

我想从时间戳创建一个TimeZone实例,所以尝试了这个 -

    SimpleDateFormat FORMATTER = new SimpleDateFormat("Z");
    String tzString = FORMATTER.format(ts);

    // the tzString comes out to be +0530 (which is correct)

    TimeZone tz = TimeZone.getTimeZone(tzString);
    System.out.println(tz);

但最终的TimeZone实例是GMT,因为它无法识别+0530。

那么,我怎样才能在这里获得正确的TimeZone实例?

4 个答案:

答案 0 :(得分:4)

您无法从java.sql.Timestamp获取TimeZone,因为它不包含一个。在您的情况下,您只需获取默认的TimeZone。它没有任何意义。它与TimeZone.getDefault();

相同

答案 1 :(得分:2)

在模式中使用小写z。这应该返回"GMT+0530",这将有效。

答案 2 :(得分:2)

您可以简单地执行此操作,而不是使用SimpleDateFormat: -

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(ts.getTime()));
TimeZone tz = cal.getTimeZone();
System.out.println(tz);

答案 3 :(得分:1)

我在下面尝试了以下代码:

  Timestamp ts = new Timestamp(System.currentTimeMillis());

然后从时间戳中获取TimeZone实例,我这样做了:

  SimpleDateFormat FORMATTER = new SimpleDateFormat("Z");
  TimeZone tzone = FORMATTER.getTimeZone();
  System.out.println(tzone.getDisplayName());
  System.out.println(tzone.getID());

我得到了:

Central European Time
Europe/Berlin

所以我得到的时区是+0200而不是GMT。

希望这就是你想要的。