【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
}
相关推荐
EatFan1 分钟前
一个二维码背后的系统设计:批次生成、绑定、扫码与数据统计怎么做?
java·后端·微信小程序·二维码·qrcode
白远山1 分钟前
自助健身小程序源码:架构拆解、核心链路与本地部署实战
java·架构·uni-app·需求分析
Lyyaoo.24 分钟前
【动态规划】【待更新】
java·数据结构·算法
我不会起名字32232 分钟前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
麻瓜code35 分钟前
【JUC】基础:并发模型、锁机制与 JMM
java
曹牧38 分钟前
SpringBoot: @RequestBody String
java
爱划水不秃头的程序员1 小时前
堆 栈 和常量池的关系是啥 是jvm对他们进行的划分吗
java
周GZ1 小时前
4个提问,deepseek讲解Java中的线程池
java
LuTshoes1 小时前
context 上下文工程
java·人工智能·spring·ai
wuminyu1 小时前
Markword在紧凑对象头上的实现原理剖析
java·linux·c语言·jvm·c++