min*_*inu 7 java timezone date
我正在使用它的时区日期,我想将它转换为另一个时区,例如我有Date'3/15/2013 3:01:53 PM',这是在TimeZone'GMT-06:00'.我想在'GMT-05:00'时区转换它.我有搜索很多,而且我对如何实际日期工作感到困惑.如何应用时区到目前为止.我尝试使用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'时区的时间,所以在GMT中得到时间应该是HH + 6.我希望Date以"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);
现在,我告诉日历我要在'GMT'中约会
cal.setTimeZone (TimeZone.getTimeZone("GMT"));
的System.out.println(cal.getTime());
输出:
Fri Mar 15 03:01:53 CDT 2013
如果我出错了,请告诉我.
您需要两个格式对象,一个用于解析,另一个用于打印,因为您使用两个不同的时区,请参见此处:
// h instead of H  because of AM/PM-format
DateFormat parseFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
Date dt = null;
try {
  dt = parseFormat.parse("3/15/2013 3:01:53 PM -06:00");
}catch (ParseException e) {
  e.printStackTrace();
} 
DateFormat printFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
printFormat.setTimeZone(TimeZone.getTimeZone("GMT-05")); 
String newDateString = printFormat.format(dt);
System.out.println(newDateString);
输出:3/15/2013 04:01:53 PM -05:00
如果您想要HH:mm:ss(24小时格式),那么您只需更换
hh:mm:ss aaa 
通过
HH:mm:ss
在printFormat-pattern中.
评论问题的其他方面:
A java.util.Date没有内部时区,始终按规格引用UTC.您无法在此对象内更改它.格式化字符串可以进行时区转换,但正如我的代码示例所示(您希望转换为区域GMT-05).
然后问题切换到Date使用UTC时区(符号Z)以ISO格式打印对象的新要求.这可以通过将格式替换为"yyyy-MM-dd'T'HH:mm:ssXXX"并将printFormat的时区显式设置为GMT + 00来完成格式化.你应该澄清你真正想要的格式化输出.
关于java.util.GregorianCalendar:在此设置时区是以编程方式更改日历对象,因此它会影响方法调用calendar.get(Calendar.HOUR_OF_DAY).这与格式化无关!