You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SimpleDateFormat生成Unix时间戳?给定代码需设何myformat值

问题1:如何使用SimpleDateFormat获取Unix-Timestamp?

SimpleDateFormat本身的核心作用是在日期字符串和Date对象之间做转换,它没法直接生成Unix时间戳(也就是从1970-01-01 00:00:00 UTC到目标时间的毫秒数/秒数),但我们可以借助它间接实现:

  1. 如果你手里有一个日期字符串(比如"2023-11-13 14:30:00"),先用SimpleDateFormat把它解析成Date对象;
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:11