【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
}
相关推荐
好家伙VCC3 分钟前
# 发散创新:用 Rust构建高性能游戏日系统,从零实现事件驱动架构 在现代游戏开发中,**性能与可扩展性**是核心命题。传统基于
java·python·游戏·架构·rust
爱笑的源码基地10 分钟前
门诊his系统源码,中西医结合的数字化门诊解决方案
java·spring boot·源码·二次开发·门诊系统·云诊所系统·诊所软件源码
庞轩px11 分钟前
缓存Key设计的“七要七不要”
java·jvm·redis·缓存
小璐资源网11 分钟前
Java 21 新特性实战:虚拟线程详解
java·开发语言·python
SimonKing23 分钟前
全网爆火的OpenClaw保姆级教程Linux版,它来了。
java·后端·程序员
于慨31 分钟前
tauri
java·服务器·前端
WZTTMoon31 分钟前
从互斥锁到无锁,Java 20年并发安全进化史
java·python·安全
2501_9181269142 分钟前
学习所有6502写游戏控制器的语句
java·linux·网络·汇编·嵌入式硬件
青春易逝丶1 小时前
策略模式
java·开发语言·策略模式
贼爱学习的小黄1 小时前
NC BIP参照开发
java·前端·nc