如何将Joda Time转换为Java Time并保留原UTC时间格式?
问题:将Joda Time转换为Java Time时,如何让输出格式与Joda一致?
我的Joda Time代码:
long argDateString; DateTime istime = new DateTime(argDateString*1000); DateTime normalTime = istime.withZone(DateTimeZone.forID("UTC")); return normalTime.toString();
对应的Java代码:
Date istime = new Date(argDateString*1000); DateFormat normalTime = DateFormat.getDateTimeInstance(DateFormat.Full, DateFormat.Full); return normalTime.format(istime);
Joda Time输出:
1970-01-15T05:45:05.000Z
Java代码输出:
15 January 1970 05:45:05 o'clock UTC
请问有没有办法让Java代码输出与Joda Time一致的格式?
解决方案
要实现和Joda Time完全一致的输出格式(ISO 8601带毫秒和UTC标识Z),推荐直接使用Java 8及以上自带的java.time标准库(官方用来替代Joda Time的方案),步骤如下:
- 将秒级时间戳转换为
Instant(代表UTC时间线上的瞬时点,无需手动乘1000):
Instant instant = Instant.ofEpochSecond(argDateString);
- 调用
toString()方法即可得到目标格式,Instant的默认输出就是yyyy-MM-dd'T'HH:mm:ss.SSS'Z',和Joda Time的结果完全匹配:
return instant.toString();
如果必须基于Date类实现,也可以用SimpleDateFormat指定格式并强制设置UTC时区:
Date istime = new Date(argDateString * 1000); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); return sdf.format(istime);
注意:DateFormat和SimpleDateFormat都是线程不安全的,优先使用java.time包下的类,它们设计更合理且线程安全。
内容的提问来源于stack exchange,提问作者Random Things
相关产品推荐
相关产品推荐

