Java 转换UTC日期
当尝试转换utc日期时,我没有获得utc中的日期,我的代码哪里有问题:Java 转换UTC日期,java,date,utc,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
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
日期对象只是包含毫秒数的长变量的包装器。它不保留任何关于时区、区域设置或任何其他格式选项的信息 当您使用Date.toString()打印日期时,Java使用默认时区(在您的例子中是CET),将这个模糊的大毫秒数转换为人类可以理解的值 如果要使用特定的时区(在您的示例中为GMT)将日期转换为字符串,而不是默认的,则必须创建SimpleDataFormat,设置其时区(在您的示例中为GMT),并使用此SimpleDataFormat将日期转换为字符串
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));
你说“我不提供utc日期”是什么意思?你的问题不清楚。你的输入是19:46,输出是19:46-你给一个多小时是什么意思?在哪里?我现在不能检查Java。但我猜是你在使用Windows。Windows将本地时间存储为系统时间,大多数情况下都希望系统时间是UTC(猜测Java,这将使它返回您的本地时间为UTC)编辑:同样在冬季UTC=GMT(出于实用目的),您给出了两个不同版本的输出-为什么?你实际得到的是哪一个?(你能检查修改后的问题文本是否符合你的要求吗?)我不会转换我的日期字符串,我不会将其转换为日期对象,而是gmt时区,而不是本地时区。请再次阅读我的答案。约会没有时区。它没有。日期没有时区。只有将其转换为字符串时,才使用时区。就像字符串没有字体或颜色一样。只有将字符串转换为屏幕上的像素时,才能选择字体和颜色。如果您想要一个结合了日期、时区和区域设置的对象,请在Java8中使用GregorianCalendar或ZonedDateTime。没问题。但OP显然想要的是格林尼治标准时间,而不是UTC标准时间。