查找给定java.util.Date对象来自当前日期的天数

时间:2011-02-02 02:50:33

标签: java date

确定特定java.util.Date对象代表多少天前最标准,最高效的方法是什么?理想情况下,我希望得到一个代表(可能)分数天前的双倍。

3 个答案:

答案 0 :(得分:4)

听起来非常像:

(System.currentTimeMillis() - date.getTime()) / (24 * 60 * 60 * 1000d);

换句话说,找出当前时间和给定日期之间的差异(以毫秒为单位),然后除以一天中的毫秒数。我已经明确地将1000d作为双重文字,以使最终除法在双重算术中起作用。

答案 1 :(得分:2)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

使用 java.time(现代日期时间 API)的解决方案:

您可以使用 java.time.Duration,它以 ISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入,以查找两个瞬间。此外,如果您已经有一个标准 API 来完成这项工作,请避免自己执行计算。

import java.time.Duration;
import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        // A sample date-time in the past
        String strDateTime = "2020-09-10T10:20:30.123456789Z";

        Instant past = Instant.parse(strDateTime);
        Instant now = Instant.now();

        Duration duration = Duration.between(past, now);
        long durationInMillis = duration.toMillis();

        double days = (double) durationInMillis / Duration.ofDays(1).toMillis();
        System.out.println(days);
    }
}

样本运行的输出:

299.14329884259257

ONLINE DEMO

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 2 :(得分:1)

获取System.currentTimeMillis()并从中查找日期。然后获取daymonthyear。现在应该很容易找到差异。