【小知识大用处】Java与Unix时间戳互转

随着读者的数量越来越多,总不免被问到一些“面向搜索引擎”的问题,比如说:“Java 怎么与 Unix 时间戳互转啊?”期初我很受不了,问得多了我就习惯了,于是就打算把这些小知识点统一写成文章,到时候直接扔给读者。

Unix 时间戳是指从1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。比如说 1578179845

Java 中获取时间戳的大多数 API 返回的并不是 Unix 时间戳,而是从1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的毫秒数。比如说 1578179845000

System.currentTimeMillis();
Calendar.getInstance().getTimeInMillis();
new Date().getTime();

将毫秒级转成秒级很简单,除以 1000 就搞定。

long timeStamp = System.currentTimeMillis();
int timeStampUnix = (int) (timeStamp / 1000);

但是时间戳这样的数据对用户来说就好像是天文数字,因此需要一些加工处理,使其变成用户习惯的格式,Java 是怎么格式化这些时间戳呢?

int timeStampUnix = 1578179845;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result = simpleDateFormat.format(new Date(timeStampUnix * 1000L)); 
// 2020-01-05 07:17:25

使用 SimpleDateFormat 类,指定对应的格式,然后再将时间戳转成 Date,最后进行 format 格式化。

那怎么再转成时间戳呢?

String str = "2020-01-05 07:17:25";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int timeStampUnix = (int) (simpleDateFormat.parse(str).getTime() / 1000);
// 1578179845

不过,在实战项目中,我们通常借用第三方类库来实现转换,比如说格式化间戳可以使用 org.apache.commons.lang3.time.DateFormatUtils

DateFormatUtils.format(1578179845 * 1000L,"yyyy-MM-dd HH:mm:ss")

再转成时间戳可以使用 org.apache.commons.lang3.time.DateUtils

DateFormatUtils.format(1578179845 * 1000L,"yyyy-MM-dd HH:mm:ss")

好了,读者朋友们,以上就是本文的全部内容了,如果你还有其他的问题需要协助,可以微信搜索【沉默王二】关注我的公众号,回复“微信”即可拉取到我的个人微信,目前好友位已经不多了,早就是优势。

如果你觉得文章有点帮助,请点个赞再走。有句印度古谚是这样说的:“赠人玫瑰,手有余香。”

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默王二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值