java中ISO8601标准时间格式的转换
最近对接第三方平台接口,返回的日期是ISO8601标准时间(yyyy-MM-dd’T’HH:mm:ss.SSS’Z’),例:
"beginTime": "2018-08-07T14:44:04.923+08:00",
"endTime": "2018-08-07T14:54:18.183+08:00"
我这边需要用String格式(yyyy-MM-dd HH:mm:ss)来接收,试了很多方法,有些不能用,还有些不好用,最终选择的转换的方式如下:
先引入jar包:
<!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
/**
* 传入String类型日期(ISO8601标准时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'),返回字符串类型时间(yyyy-MM-dd HH:mm:ss)
* @param ISOdate
* @return
*/
public static String getDateStrFromISO8601Timestamp(String ISOdate){
DateTimeFormatter dtf1 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
DateTime dt= dtf1.parseDateTime(ISOdate);
DateTimeFormatter dtf2= DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
return dt.toString(dtf2);
}
还有从Date字符串转换成ISO8601标准时间的方法,但是用的jar包不一样
/**
* 和上面的jar包不一样
* 传入String类型日期(yyyy-MM-dd HH:mm:ss),返回字符串类型时间(ISO8601标准时间)
* @param timestamp
* @return
*/
public static String getISO8601TimestampFromDateStr(String timestamp){
java.time.format.DateTimeFormatter dtf1 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(timestamp,dtf1);
ZoneOffset offset = ZoneOffset.of("+08:00");
OffsetDateTime date = OffsetDateTime.of(ldt ,offset);
java.time.format.DateTimeFormatter dtf2 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
return date.format(dtf2 );
}
测试代码:
public static void main(String[] args){
String ISODateTime = "2018-08-07T14:54:18.183+08:00";
String dateStr = DateUtils.getDateStrFromISO8601Timestamp(ISODateTime);
System.out.println("dateStr = " + dateStr);
String dateTime = "2020-09-07 08:44:28";
String ISOStr = DateUtils.getISO8601TimestampFromDateStr(dateTime);
System.out.println("ISOStr = " + ISOStr);
}
打印结果:
dateStr = 2018-08-07 14:54:18
ISOStr = 2020-09-07T08:44:28.000+08:00