【问题标题】:converting UTC date转换 UTC 日期
【发布时间】:2015-01-27 05:32:55
【问题描述】:

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

【问题讨论】:

  • “我没有给出 UTC 日期”是什么意思?您的问题不清楚。
  • 你的输入是 19:46,你的输出是 19:46 - 你给一个多小时是什么意思?在哪里?
  • 我现在无法为 Java 检查这个。但我的猜测是使用 Windows。 Windows 将本地时间存储为系统时间,大多数事情都希望系统时间为 UTC(也猜测 Java,这将使它返回您的本地时间为 UTC)编辑:同样在冬季 UTC = GMT(出于实际人类目的)
  • 您给出了两个不同版本的输出 - 为什么?你实际得到的是哪个?
  • (你能检查修改后的问题文本是不是你想要的吗?)

标签: java date utc


【解决方案1】:

日期对象只是一个包含毫秒数的长变量的包装器。它不保留有关时区或语言环境或任何其他格式选项的任何信息。

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

如果您想使用 特定 时区(在您的情况下为 GMT)将日期转换为字符串,而不是默认的,那么您必须创建一个 SimpleDateFormat,设置其时区(在您的情况下为 GMT),并使用此 SimpleDateFormat 将日期转换为字符串。

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));

【讨论】:

  • 我不转换我的日期字符串,我不会将它作为日期对象,而是作为 gmt 时区,而不是我的本地时区。
  • 再次阅读我的答案。日期没有时区。它没有一个。日期没有时区。只有当您将其转换为使用时区的字符串时。就像字符串没有字体或颜色一样。只有当您将字符串转换为屏幕上的像素时,您才能选择字体和颜色。如果您想要一个组合日期、TimeZone 和 Locale 的对象,请使用 GregorianCalendar 或 Java 8 中的 ZonedDateTime。
  • 没问题。但 OP 显然想要 GMT,而不是 UTC。
猜你喜欢
  • 1970-01-01
  • 2021-04-19
  • 2011-11-06
  • 2016-04-25
  • 2011-07-11
  • 1970-01-01
  • 2015-12-26
  • 2019-11-26
  • 2011-01-14
相关资源
最近更新 更多