SimpleDateFormat不维护时区

时间:2013-01-20 10:44:56

标签: java datetime simpledateformat

我有一个日期对象,格式如下:

Sun 1月20日10:12:27 GMT + 02:00 2013

以上时间正确显示在microsoft outlook中:

Sun 1/20/2013 12:12 PM (这是GMT + 2>>客户时区的时间)

在尝试使用SimpleDateFormat格式化日期对象时,使用以下代码显示在Outlook中:

SimpleDateFormat sdf=new SimpleDateFormat(
    "EEE M/d/yyyy hh:mm a");
    String receivedDate = sdf.format(email.getDateTimeReceived());

格式化的结果是:

Sun 1/20/2013 10:12 AM

因此缺少两小时的时区差异。

请告知如何解决这个问题,谢谢。

2 个答案:

答案 0 :(得分:3)

您忘了告诉SimpleDateFormat包含时区信息。

这样可以解决问题:

SimpleDateFormat sdf=new SimpleDateFormat(
    "EEE M/d/yyyy hh:mm a zzzZ yyyy");

注意末尾的大写Z以显示时间差异

这将打印:

  

Sun 1/20/2013 12:09 PM CET + 0100 2013

如果你需要GMT,你可以这样强迫:

sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

现在它将打印:

  

Sun 1/20/2013 11:11 AM GMT + 0000 2013

如果您不需要AM / PM,请删除a

答案 1 :(得分:3)

如果我理解正确,您希望使用GMT时区格式化日期。

DateFormat dateFormat = new SimpleDateFormat("EEE M/d/yyyy hh:mm a");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String formattedDate = dateFormat.format(date);