如何从当天的纪元时间获取天数? [复制]

Posted

技术标签:

【中文标题】如何从当天的纪元时间获取天数? [复制]【英文标题】:How to get number of days ago from a epoch time from current day? [duplicate] 【发布时间】:2021-08-10 15:03:03 【问题描述】:

我有一个纪元时间在字符串中的场景。我需要将其转换为当前时间的天数。

例如:

String epoch = "1600852773514";
Date expiry = new Date(Long.parseLong(epoch));

Expiry 给了我 Wed Sep 23 14:49:33 IST 2020 。但我想得到从今天到时间 'epoch' 的天数。就像纪元是从今天算起的 240 天前。

If expiry > 30 days
pass
else
fail  

【问题讨论】:

你试过什么?它在哪里失败?发布您的代码 我建议你不要使用Date。该课程设计不良且早已过时。而是使用InstantLocalDate 和/或来自java.time, the modern Java date and time API 的其他类。 如果到期时间是 IST 2020 年 9 月 23 日星期三 14:49:33 并且当前时间是 9 月 24 日 13:02,您是否要计算一天(因为日期不同),或者你想在今天 14:49:33 之后才算 1 天吗? 作为一种可能更简单的替代方法,在到期日期和时间上添加 30 天(例如使用 ZonedDateTime.plusDays())并将结果与​​当前时刻进行比较。 【参考方案1】:

你可以这样做:

Date expiry = /* ... */;
Date now = new Date();

long days = (now.getTime() - expiry.getTime()) / 86_400_000;

if (days > 30) /* ... */

所以我们以毫秒为单位取时间差:

long diff = (now.getTime() - expiry.getTime());

如果我们除以 86.000.000(这是一天有多少毫秒),我们得到过去的天数。

【讨论】:

谢谢,成功了 这是不正确的。虽然大多数日子有 86 400 000 毫秒长,但并非所有日子都是如此。【参考方案2】:

作为替代方案,您可以使用 java.time(从 Java 8 开始)并计算两个日期之间的天数:

public static void main(String[] args) 
    // example String
    String epoch = "1618991673000";
    // parse it to a long
    long epochMillis = Long.parseLong(epoch);
    // then create an Instant from that long value
    Instant instant = Instant.ofEpochMilli(epochMillis);
    // and convert it to an OffsetDateTime at UTC (+00:00)
    OffsetDateTime odt = OffsetDateTime.ofInstant(instant, ZoneOffset.UTC);
    // get today's date (only, no time of day considered)
    LocalDate today = LocalDate.now();
    // and extract the date of the OffsetDateTime
    LocalDate then = odt.toLocalDate();
    // count the days between the two dates
    long daysGone = ChronoUnit.DAYS.between(then, today);
    // and print the result...
    System.out.println("Days between " + then
                        + " and today (" + today + "): " + daysGone);

此输出(今天,2021 年 5 月 21 日):

Days between 2021-04-21 and today (2021-05-21): 30

之后,您可以轻松检查天数是大于还是小于您的场景中允许的天数。

【讨论】:

【参考方案3】:

转换为实例并使用 Duration 类:

String  epoch = "1600852773514";
Instant start = Instant.ofEpochMilli(Long.parseLong(epoch));
Instant now   = Instant.now();
Long    diff  = Duration.between(start,now).toDays();

System.out.println(diff);

【讨论】:

以上是关于如何从当天的纪元时间获取天数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中将 1970 年前的日期转换为纪元? [复制]

如何在grafana elasticsearch中查找从现在到一个纪元时间的天数

如何获得一个月的所有天数? [复制]

如何在 Swift 中获取两个日期之间的天数? [复制]

如何获取 Oracle 11g 中两个日期之间的天数? [复制]

将自纪元以来的天数转换为日期