在现在之前30分钟获得Android Unix纪元?

时间:2015-01-08 09:21:49

标签: java android epoch

据我所知,您可以使用以下代码在Android应用程序中以毫秒为单位获取Unix Epoch:

System.currentTimeMillis()

你如何才能在30分钟前获得价值呢?

2 个答案:

答案 0 :(得分:3)

考虑使用数学。一秒钟内有1000毫秒,一分钟内有60秒。因此:

System.currentTimeMillis() - 30 * 60 * 1000

答案 1 :(得分:2)

java.time

使用现代日期时间 API java.time,您无需自己执行任何计算即可完成。

演示:

import java.time.Instant;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        long millisNow = System.currentTimeMillis();
        Instant instantNow = Instant.ofEpochMilli(millisNow);
        Instant instant30MinsAgo = instantNow.minus(30, ChronoUnit.MINUTES);
        long millis30MinsAgo = instant30MinsAgo.toEpochMilli();
        // System.out.println(millis30MinsAgo);

        // In a single command
        long millisThrityMinsAgo = Instant.ofEpochMilli(System.currentTimeMillis())
                                    .minus(30, ChronoUnit.MINUTES)
                                    .toEpochMilli();
        
        // System.out.println(millisThrityMinsAgo);
    }
}

使用以下代码,您可以在不使用System.currentTimeMillis()的情况下获取当前时刻:

Instant.now()

因此,您还可以使用以下代码获得 30 分钟前的 Unix Epoch 毫秒:

Instant.now().minus(30, ChronoUnit.MINUTES).toEpochMilli()

modern date-time API 中详细了解 java.timeTrail: Date Time*


* 出于任何原因,如果您必须坚持使用 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