我想将长日期转换为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
我该怎么做? (没有字符串函数)
答案 0 :(得分:9)
使用XXX
作为格式字符串中的时区而不是Z
:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX");
如果您使用的是Java 7或更高版本,则可以使用。
对于旧版本的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.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));