繁体   English   中英

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

[英]get previous hour/previous day timestamp from a unix value

我的纪元时间戳为1567318967(2019年9月1日6:22:47 AM)。 从给定的纪元时间戳,如何获取前一小时和前一天,并使用Java在纪元中输出结果?

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

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

给定时间戳记1567318967,我尝试了以下操作

       previousDayInEpoch = moment(timestamp).substract(1, days)
       previosHourInEpoch = moment(timestamp).substract(1, hour)

想要使用Java输出前一天和前小时结果。

java.time

这是现代Java日期和时间API java.time擅长的情况之一:

    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);

输出是您期望的:

 previous hour: 1567315367 previous day: 1567232567 

时区至关重要

减去一天时要注意的重要一点是一天并非总是24小时。 例如,进入夏令时(DST)并返回时,有时可能是23小时,23.5小时或25小时。 ZonedDateTime知道指定时区中这一天的时长,因此我们需要使用该类。 因此,请务必填写您要放置太平洋/夸贾林区的所需时区,这一点也很重要。

编辑:要使用系统时区:

    ZoneId zone = ZoneId.systemDefault();

这使用了JVM的默认时区设置,通常是在启动JVM时从操作系统中获取的。 但是,该设置可以随时在同一JVM中运行的任何程序更改,因此通常很脆弱。 使用风险自负(或用户自担风险)。

如果您只想24小时

也对使用Instant感到好奇,请您为24小时之前考虑的其他选项更新答案。

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

    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教程:Date Time说明如何使用java.time。

我认为您可以按照以下步骤进行:

// 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM