【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
}
相关推荐
赵丙双23 分钟前
spring boot 排除自动配置类的方式和原理
java·spring boot·自动配置
8Qi831 分钟前
LeetCode热题100--45.跳跃游戏 II
java·算法·leetcode·贪心算法·编程
bilI LESS41 分钟前
Spring Boot接收参数的19种方式
java·spring boot·后端
Chan161 小时前
MCP 开发实战:Git 信息查询 MCP 服务开发
java·开发语言·spring boot·git·spring·java-ee·intellij-idea
九皇叔叔1 小时前
004-SpringSecurity-Demo 拆分环境
java·springboot3·springsecurity
爱滑雪的码农1 小时前
Java八:Character 类与string类
java·开发语言
APIshop2 小时前
京东关键词搜索接口完全指南
java·开发语言·数据库
东离与糖宝2 小时前
HashMap从入门到源码:Java7/8/21区别+面试陷阱+高频追问合集
java·人工智能·面试
wang09072 小时前
Linux性能优化之CPU利用率
java·linux·运维
2601_949817722 小时前
Spring+SpringMVC项目中的容器初始化过程
java·后端·spring