Scala中如何将指定日期格式转换为目标UTC日期格式?
在Scala中转换特定格式的UTC日期字符串
要把格式为2021-02-28 13:38:00.597+0000的日期字符串转换为Mon, Feb 28,2021 15:25:00 UTC格式的UTC日期,可以直接使用Java 8+引入的java.time系列API(Scala完全兼容这套API),具体实现如下:
1. 导入必要类
import java.time.{ZonedDateTime, ZoneId} import java.time.format.DateTimeFormatter import java.util.Locale // 可选,确保月份/星期为英文缩写
2. 定义日期格式器
分别定义输入字符串的解析规则,以及目标输出的格式规则:
// 匹配输入格式:yyyy-MM-dd HH:mm:ss.SSS+0000 val inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSZ") // 匹配输出格式:EEE, MMM dd,yyyy HH:mm:ss UTC // 指定Locale.ENGLISH避免系统默认语言影响,确保月份和星期为英文 val outputFormatter = DateTimeFormatter.ofPattern("EEE, MMM dd,yyyy HH:mm:ss zzz", Locale.ENGLISH) .withZone(ZoneId.of("UTC")) // 强制输出UTC时区的时间
3. 解析并转换日期
// 输入的日期字符串 val inputDateStr = "2021-02-28 13:38:00.597+0000" // 解析为带时区的日期时间对象 val zonedDateTime = ZonedDateTime.parse(inputDateStr, inputFormatter) // 格式化为目标字符串 val outputDateStr = outputFormatter.format(zonedDateTime) // 输出结果:Sun, Feb 28,2021 13:38:00 UTC println(outputDateStr)
关键说明
- 输入格式中的
Z用于匹配时区偏移量(如+0000),SSS匹配毫秒部分;输出格式中的EEE是星期缩写,MMM是月份缩写,zzz是时区名称。 - 即使输入日期是其他时区的偏移量,
withZone(ZoneId.of("UTC"))会自动将时间转换为UTC后再格式化。 - 推荐使用
java.timeAPI而非旧的java.util.Date/SimpleDateFormat,前者线程安全且设计更合理。
内容的提问来源于stack exchange,提问作者ConfusedDeveloper
相关产品推荐
相关产品推荐

