【Java】SimpleDateFormat & DateTimeFormatter

SimpleDateFormat &DateTimeFormatter
kotlin 复制代码
import java.text.SimpleDateFormat
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

fun main() {
    val timeString = "2024-09-22T16:00:00.000Z"
    val timeStamp = 1726992000000L
    val format = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    run {
        val formatter = SimpleDateFormat(format)
        val date = formatter.parse(timeString)
        val millis = date.time
        println(millis == timeStamp)
    }
    run {
        val formatter = DateTimeFormatter.ofPattern(format)
        val zoneDateTime = LocalDateTime.parse(timeString, formatter).atZone(ZoneId.systemDefault())
        val millis = zoneDateTime.toEpochSecond() * 1000L
        println(millis == timeStamp)
    }
}
线程安全问题

SimpleDateFormat这个类不是线程安全的

当有多个线程同时访问时,有概率出现时间解析错误

并且这个概率是相当大的,有几个线程,同时解析多个时间数据,非常容易触发

遇到此类问题,可以新建一个SimpleDateFormat实例

或使用DateTimeFormatter来代替,这个类是线程安全的

kotlin 复制代码
const val FORMAT_RFC3339 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
fun rfcTimeToLong(rftTimeString: String, safeMode: Boolean = true): Long {
    if (safeMode) {
        val formatter = DateTimeFormatter.ofPattern(FORMAT_RFC3339)
        val dateTime = LocalDateTime.parse(rftTimeString, formatter)
        return dateTime.atZone(ZoneId.systemDefault()).toEpochSecond();
    }
    return SimpleDateFormat(FORMAT_RFC3339).parse(rftTimeString).time
}
相关推荐
Unity官方开发者社区2 分钟前
《Cryptical Path》开发诀窍:像玩游戏一样开发一款类Rogue游戏
java·游戏·玩游戏
_星辰大海乀5 分钟前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
IT成长史14 分钟前
deepseek梳理java高级开发工程师微服务面试题-进阶版
java·spring cloud·微服务
zkmall24 分钟前
Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?
java·开源·harmonyos
陌路物是人非25 分钟前
uniapp取消浏览自动填充
java·服务器·uni-app
獨枭26 分钟前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
伍六星27 分钟前
maven和npm区别是什么
java·npm·maven
才知山高路远31 分钟前
Java - Junit框架
java·junit·log4j
维基框架32 分钟前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱32 分钟前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端