一、SimpleDateFormat类解析字符串
处理字符串转时间,使用SimpleDateFormat类是常见的方法之一。format()方法可以将Date类型转化为指定格式的字符串,parse()方法可以将指定格式的字符串转化为Date类型。
String timeStr = "2020-01-01 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(timeStr);
需要注意,SimpleDateFormat类处理字符串转时间时,格式要保证与字符串格式一致,否则会抛出ParseException异常。
二、DateTimeFormatter类解析字符串
DateTimeFormatter类也可以解析字符串,它是线程安全的,是Java 8引入的新类。
String timeStr = "2020-01-01T00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(timeStr, formatter);
需要注意,DateTimeFormatter类格式化字符串时,对于月、日等位数不足两位的数,要用0补齐,例如09月。同时,T代表ISO-8601标准中的日期和时间分隔符。
三、Instant类解析字符串
Instant类也可以将字符串转化为时间,它是Java 8新增的类,提供了一种方便的处理时间的方法。
String timeStr = "2020-01-01T00:00:00Z";
Instant instant = Instant.parse(timeStr);
需要注意,Instant类解析字符串时,字符串要符合ISO-8601标准。同时,Z代表UTC时区的时间,如果字符串中不包含时区信息,Instant类默认按照UTC时区处理。
四、ZonedDateTime类解析字符串
ZonedDateTime类可以解析字符串,并提供了一些方便的方法来处理时区信息,它也是Java 8新增的类。
String timeStr = "2020-01-01T00:00:00+08:00[Asia/Shanghai]";
ZonedDateTime zonedDateTime = ZonedDateTime.parse(timeStr);
需要注意,ZonedDateTime类解析字符串时,时区信息要放在方括号中,并符合区域/城市的形式,例如[Asia/Shanghai]代表中国上海时区。
五、总结
以上几种方法都可以将字符串转化为时间,具体应用时需要根据业务需求和时间格式选择不同的方法。对于日期格式,应该根据国际标准ISO 8601的日期和时间表示法来选择。ISO 8601的日期和时间表示法的官方文档为https://www.iso.org/iso-8601-date-and-time-format.html。