【问题标题】:Java - long time to ISO_8601 string formatJava - ISO_8601 字符串格式很长时间
【发布时间】:2014-12-31 10:54:00
【问题描述】:

我想将 long 日期转换为 ISO_8601 字符串。

例如:

2014-11-02T20:22:35.059823+01:00

我的代码

long timeInLong=System.currentTimeMillis();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String fmm = df.format(new java.util.Date(timeInLong));
System.out.println(fmm);

这将显示在我的控制台中

2014-11-04T15:57+0200

我想我想得到它

2014-11-04T15:57+02:00

我该怎么做? (不带字符串函数)

【问题讨论】:

标签: java date time date-format simpledateformat


【解决方案1】:

在 Java 7 或更高版本上使用 SimpleDateFormat

格式字符串中的时区使用XXX,而不是Z

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX");

如果您使用的是 Java 7 或更高版本,则此方法有效。

Java 版本 6 或更早版本

对于旧版本的 Java,您可以使用 javax.xml.bind.DatatypeConverter 类:

import javax.xml.bind.DatatypeConverter;

// ...
Calendar cal = Calendar.getInstance();
cal.setTime(new java.util.Date(timeInLong));
System.out.println(DatatypeConverter.printDateTime(cal));

请注意,这会增加毫秒数,因此输出将是例如 2014-11-04T15:49:35.913+01:00 而不是 2014-11-04T15:49:35+01:00(但这无关紧要,因为这仍然是有效的 ISO-8601 格式)。

Java 8 或更新版本

如果您使用的是 Java 8,那么最好使用新的 java.time API 而不是 java.util.Date

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeInLong),
                                            ZoneId.systemDefault());
System.out.println(zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

【讨论】:

  • 谢谢,这是我的问题的解决方案。
  • 你知道在较低的 java 版本上有什么方法吗?
  • 将其添加到我上面的答案中。
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多