转换UTC日期

时间:2015-01-26 19:58:09

标签: java date utc

在尝试转换utc日期时,我没有以UTC格式获取日期,我的代码存在问题:

String date = "Mon, 26 Jan 2015 19:46:51 GMT";
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
df.setCalendar(new GregorianCalendar(TimeZone.getTimeZone("UTC")));
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = df.parse(date);
System.out.println(d);

输出如下:

Mon Jan 26 20:46:51 CET 2015

我想:

Mon, 26 Jan 2015 19:46:51 GMT

1 个答案:

答案 0 :(得分:4)

Date对象只是一个包含数毫秒的long变量的包装器。它不会保留有关时区或区域设置或任何其他格式选项的任何信息。

使用Date.toString()打印日期时,Java使用默认时区(在您的情况下为CET),将这个不起眼的大量毫秒转换为人类可以理解的内容。

如果您想使用特定时区(在您的情况下为GMT)将日期转换为String而不是默认值,那么您必须创建SimpleDateFormat,设置其时区(在你的情况下转到GMT),并使用这个SimpleDateFormat将Date转换为String。

String date = "Mon, 26 Jan 2015 19:46:51 GMT";

// this is how you want to parse it
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
Date d = df.parse(date);

// this is how you want to print it
DateFormat dfo = new SimpleDateFormat("HH:mm:ss z", Locale.ENGLISH);
dfo.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(dfo.format(d));