1

使用以下代码-

    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

4 回答 4

4

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

于 2013-04-29T09:55:22.210 回答
2

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

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(ts.getTime()));
TimeZone tz = cal.getTimeZone();
System.out.println(tz);
于 2013-04-29T09:52:53.467 回答
2

z在您的模式中使用小写字母。那应该返回"GMT+0530",这将起作用。

于 2013-04-29T09:51:28.217 回答
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。

希望这是你想要的。

于 2013-04-29T10:38:39.950 回答