0

我想创建一个日历对象,它是纪元日期。什么是“正确”(如果有的话)方法?

Date epochDate = new java.text.SimpleDateFormat ("dd/MM/yyyy HH:mm:ss z").parse("01/01/1970 01:00:00 GMT");
Calendar epochCal;
epochCal.setTime(epochDate);

// or maybe

Calendar epochCal;
epochCal.setTimeInMillis(1);
4

2 回答 2

1

'setTimeInMillis()' 方法可以正常工作并且易于被其他人理解。如果您将其传递为 0 而不是 1,则可能会更清楚。第一种方法有更多的线路噪音,只会增加更多可能在维护中搞砸的事情。

于 2010-10-26T01:24:36.067 回答
1

java.time

旧的日期时间 API(java.util日期时间类型及其格式类型SimpleDateFormat)已过时且容易出错。建议完全停止使用它并切换到java.time现代日期时间 API *

使用现代 API 的解决方案:

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.EPOCH;
        System.out.println(instant);
    }
}

输出:

1970-01-01T00:00:00Z

如果您需要一个由 引用的对象java.util.Calendar,您可以使用以下对象获得相同的结果Instant

// If at all you need a Calendar object, derive it from instant
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(instant.toEpochMilli());
// Verification
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
System.out.println(sdf.format(calendar.getTime()));

Trail: Date Time了解有关现代日期时间 API *的更多信息。


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

于 2021-05-15T16:51:10.873 回答