java - 使用 +00 将日期转换为 UTC

标签 java simpledateformat

如何将日期转换为格式“2015-10-26 20:07:45+00”

如果我使用 UTC-"yyyy-MM-dd'T'HH:mm:ss'Z'",我会得到“2015-10-26T20:07:45Z”

我应该简单地将 T 替换为空格,将 Z 替换为 +00,还是可以使用任何其他格式来直接获取我想要的格式?

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(now);

最佳答案

根据SimpleDateFormat的文档,没有将ISO-UTC偏移量显示为“+00”的模式符号。最接近的模式符号是“X”,仅当时区偏移量偏离 UTC 时才显示小时偏移量。所以我主要看到两个选择:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'+00'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
System.out.println(nowAsISO);

在这里设置文字偏移量仍然可以(异常(exception)),因为您在格式对象上显式设置了时区 UTC。但这仍然是一个黑客。

否则您可以使用(如果在 Java 8 - 使用新的模式符号“x”):

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssx");
ZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.UTC);
String nowAsISO = dtf.format(zdt);
System.out.println(nowAsISO); // 2015-10-27 18:13:15+00

Java-8 中的替代方法(恕我直言,更好):

DateTimeFormatter dtf = 
  DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssx").withZone(ZoneOffset.UTC);
Instant now = new Date().toInstant(); // or better: Instant.now();
String nowAsISO = dtf.format(now);
System.out.println(nowAsISO); // 2015-10-27 18:13:15+00

关于java - 使用 +00 将日期转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355086/

相关文章:

Java SimpleDateFormat.getTimeZone().getID() 返回 Asia/Jerusalem 而不是 Asia/Kolkata

Java/Ada Big Endian 到 Linux Little Endian 问题

java - Eclipse "autosave before build"不工作?

java - 为什么这个 SimpleDateFormat 不能解析这个日期字符串?

java - 难以使用 SimpleDateFormat 解析字符串

Java DateFormat 和 SimpleDateFormat 返回不正确的日期

java - java中的window azure身份验证

java - UTF8 Bomless 与 Cp1252

java - 如何使用坐标在 map android上查找位置

java - 使用 Java SimpleDateFormat 查找最大日期