簡體   English   中英

你如何在 Java 中創建一個合適的 Epoch 日歷對象?

[英]How do you create a proper Epoch calendar object in Java?

我想創建一個作為紀元日期的日歷對象。 什么是“正確”(如果有)的方法?

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

'setTimeInMillis()' 方法可以正常工作並且很容易被其他人理解。 如果你將它傳遞給 0 而不是 1,它也可能更清楚。第一種方法有更多的線路噪音,只是增加了更多的機會在維護中搞砸了。

時間

遺留日期時間 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 工作級別仍然不符合 Java-8,請檢查 通過 desugaringHow to use ThreeTenABP in Android Project 可用的 Java 8+ APIs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM