在尝试转换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
答案 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));