簡體   English   中英

當我生成 java 日歷 object 時,我會生成什么?

[英]What am I generating when I generate a java Calendar object?

我想知道我應該如何使用 java 日歷對象才能正確使用它們(使用這個 class 是我的任務所必需的,所以雖然我喜歡使用一些更好的選項 - 它們不是選項)。

我在這里閱讀了文檔: https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#:~:text=A%20Calendar%20object%20can%20produce,as %20well%20as%20their%20意思

而且我仍然不明白如何正確使用日歷 object。

我需要代表幾個火車站的到達和離開時間。 我應該為每個到達時間和出發時間分別使用單獨的日歷 object 嗎? 我可以將兩者都包含在同一個 object 中嗎?

單個日歷 object 代表什么? 它是單個時間點(即年、月、日、時、分)嗎? 現在我為每個車站的到達和離開時間使用單獨的對象。 這意味着我有大量的日歷對象。 我是否正確使用它們?

我的代碼片段是:

    Calendar TimeArrival = Calendar.getInstance();
    Calendar TimeDeparture = Calendar.getInstance();
    TimeArrival.set  (2020,8,20,00,01);
    TimeDeparture.set(2020,8,20,20,30);

我想知道我應該如何使用 java 日歷對象

不要使用來自java.util package 的過時的容易出錯的日期/時間 API。 使用來自java.time package 的現代日期/時間API。 Trail 了解更多信息:日期時間

一個例子:

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime dateTimeArrival = LocalDateTime.of(2020, 8, 20, 00, 01);
        LocalDateTime dateTimeDeparture = LocalDateTime.of(2020, 8, 20, 20, 30);
        System.out.println(dateTimeArrival);
        System.out.println(dateTimeDeparture);
    }
}

Output:

2020-08-20T00:01
2020-08-20T20:30

如果要存儲時區信息,請使用ZonedDateTimeOffsetDateTime 根據您的要求從下中選擇 class:

在此處輸入圖像描述

我需要代表幾個火車站的到達和離開時間。 我應該為每個到達時間和出發時間分別使用單獨的日歷 object 嗎? 我可以將兩者都包含在同一個 object 中嗎?

如果您只有幾個日期時間信息實例,請使用上面提到的不同變量。 如果您有多個實例要存儲,則可以使用List (或數組,如果您事先知道實例的數量),例如

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<LocalDateTime> dateTimes = new ArrayList<>();
        dateTimes.add(LocalDateTime.now());
        dateTimes.add(LocalDateTime.now().plusHours(2));
        dateTimes.add(LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()));
        dateTimes.add(LocalDate.of(2020, 8, 10).atStartOfDay());
        // etc.

        System.out.println(dateTimes);
    }
}

Output:

[2020-08-14T21:37:14.427085, 2020-08-14T23:37:14.429504, 2020-08-31T21:37:14.429518, 2020-08-10T00:00]

我了解將您的日期和時間存儲在現代java.time類的對象中不是一種選擇; 必須使用設計不佳且過時的Calendar class。 現代ZonedDateTime可能是最好的選擇。

... 我應該為每個到達時間和出發時間分別使用單獨的日歷 object 嗎? 我可以將兩者都包含在同一個 object 中嗎?

是的,當您需要跟蹤到達和離開時間時,您需要單獨的對象。 不, Calendar object 只能保存一次,因此兩者都不適合。

作為補充,請允許我展示另外兩種初始化Calendar對象的方法。

現代:無論如何都要使用java.time

    ZoneId zone = ZoneId.of("Asia/Tokyo");
    ZonedDateTime arrivalZdt = ZonedDateTime.of(2020, 8, 20, 0, 1, 0, 0, zone);
    Calendar timeArrival = GregorianCalendar.from(arrivalZdt);

有了這個代碼,你就可以為你的老師意識到使用Calendar是一個非常愚蠢的想法或者你換了另一位老師的那一天做好了充分的准備。

老式:使用 GregorianCalendar 構造函數

    Calendar timeArrival = new GregorianCalendar(2020, Calendar.AUGUST, 20, 0, 1);

在任何情況下,都不要在您的號碼前加上零。 巧合的是0001的工作時間為0:01 ,但是當您到達0809時,您的代碼將不再編譯。 在 Java(和許多其他語言)中,以0開頭的數字被視為八進制數。

回答你的標題問題:你在生成什么?

計算機將時間表示為 1970 年 1 月 1 日 00:00:00 UTC 之后long毫秒數。 您的日歷還可能包含當地時區的副本。

最后,對 Calendar.getInstance 的調用可能會返回一個 GregorianCalendar object。

暫無
暫無

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

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