如何用SimpleDateFormat生成Unix时间戳?给定代码需设何myformat值
问题1:如何使用SimpleDateFormat获取Unix-Timestamp?
SimpleDateFormat本身的核心作用是在日期字符串和Date对象之间做转换,它没法直接生成Unix时间戳(也就是从1970-01-01 00:00:00 UTC到目标时间的毫秒数/秒数),但我们可以借助它间接实现:
- 如果你手里有一个日期字符串(比如
"2023-11-13 14:30:00"),先用SimpleDateFormat把它解析成Date对象; - 调用
Date对象的getTime()方法,就能拿到毫秒级的Unix时间戳;要是需要秒级的,把结果除以1000就行。
示例代码:
String dateString = "2023-11-13 14:30:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 解析字符串为Date对象 Date date = sdf.parse(dateString); // 获取毫秒级Unix时间戳 long unixTimestampMs = date.getTime(); // 获取秒级Unix时间戳 long unixTimestampSec = unixTimestampMs / 1000;
要是你只是想获取当前时间的Unix时间戳,直接用System.currentTimeMillis()或者new Date().getTime()就够了,完全不需要用到SimpleDateFormat。
问题2:给定代码无法修改,设置myformat属性的值为多少才能得到Unix时间戳?
很遗憾,Java的SimpleDateFormat没有提供直接输出Unix时间戳的格式模式。它的所有格式规则都是围绕日期/时间的单个组成部分(年、月、日、时、分、秒、毫秒等)设计的,没有能直接输出从1970年开始的总毫秒数/秒数的模式字符。
你的代码是把当前Date对象格式化为字符串,但SimpleDateFormat没办法把Date对象直接转成Unix时间戳的数字字符串。如果必须用这段代码,没有任何合法的myformat值能让它动态输出当前时间的Unix时间戳——除非你接受固定的静态值(比如启动JVM时设置-Dmyformat=1699999999000,但这只会输出这个固定的数字,不会随当前时间变化)。
如果要动态输出当前时间的Unix时间戳,必须修改代码,直接调用new Date(System.currentTimeMillis()).getTime()或者System.currentTimeMillis()来获取,而不是通过SimpleDateFormat格式化。
内容的提问来源于stack exchange,提问作者Grim
相关产品推荐
相关产品推荐

