Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换UTC日期_Java_Date_Utc - Fatal编程技术网

Java 转换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

当尝试转换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

日期对象只是包含毫秒数的长变量的包装器。它不保留任何关于时区、区域设置或任何其他格式选项的信息

当您使用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标准时间。