一、SimpleDateFormat類解析字符串
處理字符串轉(zhuǎn)時(shí)間,使用SimpleDateFormat類是常見的方法之一。format()方法可以將Date類型轉(zhuǎn)化為指定格式的字符串,parse()方法可以將指定格式的字符串轉(zhuǎn)化為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類處理字符串轉(zhuǎn)時(shí)間時(shí),格式要保證與字符串格式一致,否則會(huì)拋出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類格式化字符串時(shí),對(duì)于月、日等位數(shù)不足兩位的數(shù),要用0補(bǔ)齊,例如09月。同時(shí),T代表ISO-8601標(biāo)準(zhǔn)中的日期和時(shí)間分隔符。
三、Instant類解析字符串
Instant類也可以將字符串轉(zhuǎn)化為時(shí)間,它是Java 8新增的類,提供了一種方便的處理時(shí)間的方法。
String timeStr = "2020-01-01T00:00:00Z";
Instant instant = Instant.parse(timeStr);
需要注意,Instant類解析字符串時(shí),字符串要符合ISO-8601標(biāo)準(zhǔn)。同時(shí),Z代表UTC時(shí)區(qū)的時(shí)間,如果字符串中不包含時(shí)區(qū)信息,Instant類默認(rèn)按照UTC時(shí)區(qū)處理。
四、ZonedDateTime類解析字符串
ZonedDateTime類可以解析字符串,并提供了一些方便的方法來處理時(shí)區(qū)信息,它也是Java 8新增的類。
String timeStr = "2020-01-01T00:00:00+08:00[Asia/Shanghai]";
ZonedDateTime zonedDateTime = ZonedDateTime.parse(timeStr);
需要注意,ZonedDateTime類解析字符串時(shí),時(shí)區(qū)信息要放在方括號(hào)中,并符合區(qū)域/城市的形式,例如[Asia/Shanghai]代表中國上海時(shí)區(qū)。
五、總結(jié)
以上幾種方法都可以將字符串轉(zhuǎn)化為時(shí)間,具體應(yīng)用時(shí)需要根據(jù)業(yè)務(wù)需求和時(shí)間格式選擇不同的方法。對(duì)于日期格式,應(yīng)該根據(jù)國際標(biāo)準(zhǔn)ISO 8601的日期和時(shí)間表示法來選擇。ISO 8601的日期和時(shí)間表示法的官方文檔為https://www.iso.org/iso-8601-date-and-time-format.html。