首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从unix值获取前一小时/前一天的时间戳

从unix值获取前一小时/前一天的时间戳
EN

Stack Overflow用户
提问于 2019-09-02 03:58:08
回答 2查看 1.6K关注 0票数 0

我有一个划时代的时间戳1567318967 (2019年9月1日6:22:47 )。从给定的时代时间戳中,如何获得前一小时和前一天的时间,并使用Java输出划时代的结果?

也就是说。

前一小时:输出结果: 1567315367 (2019年9月1日5:22:47 )

前一天:产出结果: 1567232567 (2019年8月31日6:22:47 )

考虑到时间戳为1567318967,我尝试了以下步骤

代码语言:javascript
复制
       previousDayInEpoch = moment(timestamp).substract(1, days)
       previosHourInEpoch = moment(timestamp).substract(1, hour)

希望使用Java输出前一天和前一小时的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-02 04:23:42

java.time

这是java.time (现代Java和time )擅长的情况之一:

代码语言:javascript
复制
    ZoneId zone = ZoneId.of("Pacific/Kwajalein");
    long originalTimestamp = 1_567_318_967L;
    ZonedDateTime dateTime = Instant.ofEpochSecond(originalTimestamp).atZone(zone);

    long anHourLess = dateTime.minusHours(1).toInstant().getEpochSecond();
    System.out.println("previous hour: " + anHourLess);

    long aDayLess = dateTime.minusDays(1).toInstant().getEpochSecond();
    System.out.println("previous day: " + aDayLess);

输出是您所期望的:

前一小时: 1567315367前一天: 1567232567

时区是至关重要的

在减去一天时要注意的是,一天并不总是24小时。它有时可能是23小时,23.5小时或25小时,例如进入夏季时间(DST)和回来。ZonedDateTime知道指定时区中特定一天的长度,我们需要使用的类也是如此。因此,同样重要的是,你要填写你想要的时区,我把太平洋/夸贾林。

编辑:要使用系统时区:

代码语言:javascript
复制
    ZoneId zone = ZoneId.systemDefault();

这使用JVM的默认时区设置,它通常是在JVM启动时从操作系统中获取的。但是,运行在同一JVM中的任何程序在任何时候都可能更改设置,因此通常是脆弱的。自费使用(或你的用户自己的风险)。

如果你只想24小时

同样好奇的使用即时,请您更新的另一个选项的答案,这是考虑24小时前。

在这种情况下,我们不需要任何时区或任何ZonedDateTime。要从Instant中减去一个小时或一天(总是24小时),您需要知道如何减少。事情是这样的:

代码语言:javascript
复制
    Instant originalInstant = Instant.ofEpochSecond(originalTimestamp);

    long anHourLess = originalInstant.minus(1, ChronoUnit.HOURS).getEpochSecond();
    System.out.println("previous hour: " + anHourLess);

    long aDayLess = originalInstant.minus(1, ChronoUnit.DAYS).getEpochSecond();
    System.out.println("previous day: " + aDayLess);

在这种情况下,输出与上面的输出相同。

链接

Oracle教程:日期时间解释了如何使用java.time。

票数 3
EN

Stack Overflow用户

发布于 2019-09-02 04:32:20

我认为你可以这样做:

代码语言:javascript
复制
// remove the 60 seconds time 60 minutes * 1000 (for millisecond)
long previousHourEpoch = epoch - (60*60*1000);

// remove the 24 hours * 60 seconds time 60 minutes * 1000 (for millisecond)
long previousDayEpoch = epoch - (24*60*60*1000);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57751263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档