Java - 长时间使用ISO_8601字符串格式

时间:2014-11-04 14:00:13

标签: java date time date-format simpledateformat

我想将长日期转换为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

我该怎么做? (没有字符串函数)

1 个答案:

答案 0 :(得分:9)

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