有个Calendar 类型的数据,值为:2008-12-04T09:30:47-05:00
现在想把它转换成日期类型。想得到值:2008-12-04 09:30:47
Calendar datetime
Date dt=datetime.getTime();
System.out.println(dt);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dt));输出的两个值:
Thu Dec 04 22:30:47 CST 2008
2008-12-04 22:30:47请高手帮解决一下,
这里出现22时,可能与时区有关吧。因为数据是西五区,而我们这是东八区,相差了十三个小时,请问是不是这个问题啊?
如果处理才能忽略掉时区呢?
现在想把它转换成日期类型。想得到值:2008-12-04 09:30:47
Calendar datetime
Date dt=datetime.getTime();
System.out.println(dt);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dt));输出的两个值:
Thu Dec 04 22:30:47 CST 2008
2008-12-04 22:30:47请高手帮解决一下,
这里出现22时,可能与时区有关吧。因为数据是西五区,而我们这是东八区,相差了十三个小时,请问是不是这个问题啊?
如果处理才能忽略掉时区呢?
这个应该是西五区时间了,后面不是有一个-05:00嘛,这个表示比标准时间晚5个小时,
你现在的时区默认是操作系统当前时区,在中国是东八区,GMT+8:00 ,转换过来当然就少 8+5 = 13个小时了。不能忽略时区,你可以修改一下默认的时区可以得到你想要的
TimeZone.setDefault(TimeZone.getTimeZone("GMT-5"));
public static void setDefault(TimeZone zone)设置由 getDefault 方法返回的 TimeZone。如果 zone 为 null,把默认值重设为第一次启动虚拟机时的最初值。
参数:
zone - 新的默认时区可参考API文档:TimeZone 表示时区偏移量,也可以计算夏令时。
通常,使用 getDefault 获取 TimeZone,getDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。
也可以用 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
可以使用 getAvailableIDs 方法来对所有受支持的时区 ID 进行迭代。可以选择受支持的 ID 来获得 TimeZone。如果想要的时区无法用受支持的 ID 之一表示,那么可以指定自定义时区 ID 来生成 TimeZone。自定义时区 ID 的语法是:
CustomID:
GMT Sign Hours : Minutes
GMT Sign Hours Minutes
GMT Sign Hours
Sign: 下面之一
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: 下面之一
0 1 2 3 4 5 6 7 8 9
Hours 必须在 0 至 23 之间,Minutes 必须在 00 至 59 之间。例如,"GMT+10" 和 "GMT+0010" 分别意味着比 GMT 提前 10 小时和 10 分钟。
格式是与区域无关的,并且数字必须取自 Unicode 标准的 Basic Latin 块。没有夏令时转换安排可以用自定义时区 ID 指定。如果指定的字符串与语法不匹配,就使用 "GMT"。
当创建一个 TimeZone 时,指定的自定义时区 ID 采用下面的语法进行标准化:
NormalizedCustomID:
GMT Sign TwoDigitHours : Minutes
Sign: 下面之一
+ -
TwoDigitHours:
Digit Digit
Minutes:
Digit Digit
Digit: 下面之一
0 1 2 3 4 5 6 7 8 9
例如,TimeZone.getTimeZone("GMT-8").getID() 返回 "GMT-08:00"。