[英]What am I generating when I generate a java Calendar object?
我想知道我應該如何使用 java 日歷對象才能正確使用它們(使用這個 class 是我的任務所必需的,所以雖然我喜歡使用一些更好的選項 - 它們不是選項)。
而且我仍然不明白如何正確使用日歷 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
如果要存儲時區信息,請使用ZonedDateTime
或OffsetDateTime
。 根據您的要求從下表中選擇 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);
在任何情況下,都不要在您的號碼前加上零。 巧合的是00
和01
的工作時間為0:01
,但是當您到達08
或09
時,您的代碼將不再編譯。 在 Java(和許多其他語言)中,以0
開頭的數字被視為八進制數。
回答你的標題問題:你在生成什么?
計算機將時間表示為 1970 年 1 月 1 日 00:00:00 UTC 之后long
毫秒數。 您的日歷還可能包含當地時區的副本。
最后,對 Calendar.getInstance 的調用可能會返回一個 GregorianCalendar object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.