Java Date Time 教程-java.util.Calendar和GregorianCalendar
目錄
-
例項化
GregorianCalendar
-
獲取年、月、日等
-
增加和減少年、月、日等
-
陷阱和誤區
-
月份的陷阱
-
星期幾的誤區
-
JavaDoc
中的更多細節
Java
的
java.util.Calendar
用於日期和時間的運算。無論任何時候,只要你有一些輕微操作(除了僅僅表示日期和時間)需要執行,那麼就使用這個類。(原文:Whenever you have something slightly more advanced than just representing a date and time, this is the class to use。)
java.util.Calendar
類是抽象的,意味著你不能對其進行例項化。這麼設計的原因是這個世界有著多個日曆存在。舉個例子,阿拉伯日曆使用了一個和大部分西方國家所使用的公曆不同的年份作為它的第一年。
(譯者注:
關於現行公曆,轉載維基的一段內容如下(地址在這):
現行公曆(拉丁語:Calendarium Gregorianum,又稱格里曆,又譯國瑞歷、額我略曆、格列高利曆、格里高利曆),是由義大利醫生兼哲學家阿洛伊修斯·裡利烏斯改革儒略曆制定的歷法,由教皇格列高利十三世在1582年頒行。公曆是陽曆的一種,於1912年開始在中國正式採用,取代傳統使用的中國曆法農曆,而中國傳統曆法是一種陰陽曆,因而公曆在中文中又稱陽曆、西曆、新曆。格里曆與儒略曆一樣,格里曆也是每四年在2月底置一閏日,但格里曆特別規定,除非能被400整除,所有的世紀年(能被100整除)都不設閏日;如此,每四百年,格里曆僅有97個閏年,比儒略曆減少3個閏年。)
例項化
GregorianCalendar
Java
中只攜帶了格里曆的實現,那就是
java.util.GregorianCalendar
類,下面是一個你如何例項化
GregorianCalendar
的例子:
Calendar calendar = new GregorianCalendar();
一個新的
GregorianCalendar
有著被設定為當前時間點的日期和時間,表示這是由它所建立的。
獲取年、月、日等
Calendar
類有著一些成對的方法可以讓你獲取到年、月、日、小時、分鐘、秒、毫秒和給定日期的時區。下面是一些如何獲取的例子:
Calendar calendar
=
new
GregorianCalendar
(
)
;
int year
= calendar
.
get
(Calendar
.YEAR
)
;
int month
= calendar
.
get
(Calendar
.MONTH
)
;
int dayOfMonth
= calendar
.
get
(Calendar
.DAY_OF_MONTH
)
;
// Jan = 0, not 1
int dayOfWeek
= calendar
.
get
(Calendar
.DAY_OF_WEEK
)
;
int weekOfYear
= calendar
.
get
(Calendar
.WEEK_OF_YEAR
)
;
int weekOfMonth
= calendar
.
get
(Calendar
.WEEK_OF_MONTH
)
;
int hour
= calendar
.
get
(Calendar
.HOUR
)
;
// 12 hour clock
int hourOfDay
= calendar
.
get
(Calendar
.HOUR_OF_DAY
)
;
// 24 hour clock
int minute
= calendar
.
get
(Calendar
.MINUTE
)
;
int second
= calendar
.
get
(Calendar
.SECOND
)
;
int millisecond
= calendar
.
get
(Calendar
.MILLISECOND
)
;
你還可以訪問更多的欄位,比如不常用的
DAY_OF_WEEK_IN_MONTH
和
AM_PM
。你可以查閱官方的
JavaDoc
瞭解這些欄位的更多資訊。
Calendar
類有著對應的
set
方法,因此你也可以對這些欄位進行設定。下面是它長啥樣的例子:
Calendar calendar
=
new
GregorianCalendar
(
)
;
calendar
.
set
(Calendar
.YEAR
,
2009
)
;
calendar
.
set
(Calendar
.MONTH
,
11
)
;
// 11 = december
calendar
.
set
(Calendar
.DAY_OF_MONTH
,
24
)
;
// christmas eve
新增和減少年、月、日等
你也可以在這些欄位上新增值並使得
Calendar
例項準確地自行更新。看看下面的例子:
//java學習交流:737251827 進入可領取學習資源及對十年開發經驗大佬提問,免費解答!
Calendar calendar
=
new
GregorianCalendar
(
)
;
//set date to last day of 2009
calendar
.
set
(Calendar
.YEAR
,
2009
)
;
calendar
.
set
(Calendar
.MONTH
,
11
)
;
// 11 = december
calendar
.
set
(Calendar
.DAY_OF_MONTH
,
31
)
;
// new years eve
//add one day
calendar
.
add
(Calendar
.DAY_OF_MONTH
,
1
)
;
//date is now jan. 1st 2010
int year
= calendar
.
get
(Calendar
.YEAR
)
;
// now 2010
int month
= calendar
.
get
(Calendar
.MONTH
)
;
// now 0 (Jan = 0)
int dayOfMonth
= calendar
.
get
(Calendar
.DAY_OF_MONTH
)
;
// now 1
當進行一些日期運算的時候,
add
方法是非常便利的。比如在一個給定的日期上新增或者減少年數、月數、天數、小時數等。
通過呼叫帶有負值的
add
方法在這些欄位上減少值,比如:
calendar.add(Calendar.DAY_OF_MONTH, -1);
陷阱和誤區
在
Calendar
類中有一些小陷阱,你應該知道這些陷阱從而避免不必要的傷腦經。我將會在接下來的章節討論他們。
月份陷阱
Calendar
類的
MONTH
欄位並不像我們在其他地方寫下日期般從1到12。取而代之的是月份從0走到11,0是1月,11是12月份。如果你不知道這個的話,它將會引發一點錯誤和隨其而來的除錯。
星期幾誤區
如你希望的那樣,星期是從1走到7,但是每週的第一天是週六而不是週一。這意味著1 =
sunday
, 2 =
monday
, …, 7 =
Saturday
。這也時不時地讓我感到有點煩惱。
JavaDoc中的更多細節
如果你需要做一些日期和時間的複雜運算,那麼查閱官方
Javadoc
的
java.util.Calendar
文件是個不錯的主意。類文件包含了更多關於該類的特性。舉個例子假如你設定日期為2009年1月34日,那麼真實的日期是什麼呢?
(全文完)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2843524/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java8 Date/Time APIJavaAPI
- java:Date和DateTime區別Java
- java -- Stringbuild、Date和Calendar類JavaUI
- java.util.Date和java.sql.Date有什麼區別?JavaSQL
- Java String和Date的轉換Java
- Java DateJava
- mysql資料庫date 、datetime、time、timestamp區別MySql資料庫
- Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)型別的比較MySql型別
- D2r 2.4 Release Date and the Time Diablo 2 Resurrected
- java.util.Date類Java
- java util.Date 轉 LocalDateTimeJavaLDA
- Joda Time專案和java8時間apiJavaAPI
- 面試題:能談談Date、Datetime、Time、Timestamp、year的區別嗎?面試題
- oracle ocp 19c考題,科目082考試題-date/time functionsOracleFunction
- java.lang.IllegalArgumentException at java.sql.Date.getHoursJavaExceptionSQL
- Java 時間類 Date、Calendar 及用法Java
- java8中的LocalDate,LocalTime,LocalDateTime與Date的轉換和使用JavaLDA
- JavaScript內部物件和Date物件JavaScript物件
- java.util.Date會被棄用嗎?Java
- Python中time, strftime和strptimePython
- Flink Time和Watermark的理解
- Java™ 教程(程式和執行緒)Java執行緒
- Oracle中Date和Timestamp的區別Oracle
- JAVA IPMI Command time out 解決方法Java
- time4vps免費VSP註冊教程
- Date
- 【Java】全域性日期處理,包含LocalDate, LocalDateTime, DateJavaLDA
- mongoose的date型別和timestamps的使用Go型別
- String和Date、Timestamp之間的轉換
- leetcode best-time-to-buy-and-sell-stock-iii(Java)LeetCodeJava
- 什麼是 Java 的 AOT(Ahead-Of-Time)?Java
- golang 中 time 包使用教程之基礎使用篇Golang
- java.sql.BatchUpdateException: Date truncation: Out of range value for column xxxxxJavaSQLBATException
- 【Java 核心技術 1】時間 Date、LocalDate 練習JavaLDA
- [Java 核心技術 1] 時間 Date、LocalDate 練習JavaLDA
- date 物件物件
- JavaScript Date()JavaScript
- Date or String