使用以下代码 -
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实例?
答案 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。
希望这就是你想要的。