【发布时间】:2014-07-03 13:14:30
【问题描述】:
我的时区有日期,我想将其转换为另一个时区,例如我有日期“2013 年 3 月 15 日下午 3:01:53”,它位于时区“GMT-06:00”中。我想在 'GMT-05:00' 时区转换它。我有很多搜索,我对 Date 的实际工作方式感到困惑。如何将时区应用到日期。我尝试使用 SimpleDateFormat、Calender 以及偏移量。
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa XXX");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
Date dt = null;
try {
dt = df.parse("3/15/2013 3:01:53 PM -06:00");
} catch (ParseException e) {
e.printStackTrace();
}
String newDateString = df.format(dt);
System.out.println(newDateString);
返回输出
03/15/2013 09:01:53 AM Z。
我想应该是
03/15/2013 09:01:53 PM Z,因为 'GMT-06:00' 时区的时间,所以它应该是 HH+6 以获取 GMT 时间。我想要“yyyy-MM-dd HH:mm:ss”格式的日期,其中 HH 是 24 小时。请帮我举个例子。提前致谢。
编辑:
我正在使用 SimpleDateFormat 将字符串转换为日期
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa");
Date dt = null;
try {
dt = df.parse("3/15/2013 3:01:53 PM");
} catch (ParseException e) {
e.printStackTrace();
}
现在,正如您所说,我向日历指定我的日期在“GMT-06:00”时区并设置我的日期,
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"));
cal.setTime(dt);
现在,我告诉日历我想要“格林威治标准时间”的日期
cal.setTimeZone (TimeZone.getTimeZone("GMT"));
System.out.println(cal.getTime());
输出:
Fri Mar 15 03:01:53 CDT 2013
如果我出错了,请知道我。
【问题讨论】:
-
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 和 Java 中内置的 java.time 类所取代9. 见Tutorial by Oracle。