java.util.Date
類 表示特定的瞬間,精確到毫秒。java
繼續查閱Date類的描述,發現Date擁有多個構造函數,只是部分已通過時,可是其中有未過期的構造函數能夠把毫秒值轉成日期對象。git
public Date()
:分配Date對象並初始化此對象,以表示分配它的時間(精確到毫秒)。public Date(long date)
:分配Date對象並初始化此對象,以表示自從標準基準時間(稱爲「曆元(epoch)」,即1970年1月1日00:00:00 GMT)以來的指定毫秒數。tips: 因爲咱們處於東八區,因此咱們的基準時間爲1970年1月1日8時0分0秒。數組
簡單來講:使用無參構造,能夠自動設置當前系統時間的毫秒時刻;指定long類型的構造參數,能夠自定義毫秒時刻。例如:app
package com; import java.util.Date; /** * 日期時間類 */ public class DateTest { public static void main(String[] args) { // 空參構造函數 Date date = new Date(); System.out.println(date); // 帶毫秒的long參數 毫秒轉日期 Date date1 = new Date(999999999999L); System.out.println(date1); // 日期轉毫秒 long millisecond = date.getTime(); System.out.println(millisecond); } }
tips:在使用println方法時,會自動調用Date類中的toString方法。函數
Date類對Object類中的toString方法進行了覆蓋重寫,因此結果爲指定格式的字符串。測試
Date類中的多數方法已通過時,經常使用的方法有:code
方法摘要 | 描述+ |
---|---|
public long getTime() | 把日期對象轉換成對應的時間毫秒值。 |
boolean after(Date when) | 測試此日期是否在指定日期以後。 |
boolean before(Date when) | 測試此日期是否在指定日期以前。 |
int compareTo(Date anotherDate) | 比較兩個日期的順序。等於返回 0;以前返回小於 0 的值;以後返回大於 0 的值。 |
boolean equals(Object obj) | 比較兩個日期的相等性。 |
Object clone() | 返回此對象的副本。 |
int hashCode() | 返回此對象的哈希碼值。 |
String toString() | 把此 Date 對象轉換爲如下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一週中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
java.text.DateFormat
是日期/時間格式化子類的抽象類,orm
咱們經過這個類能夠幫咱們完成日期和文本之間的轉換,也就是能夠在Date對象與String對象之間進行來回轉換。對象
格式化:按照指定的格式,從Date對象轉換爲String對象。ip
解析:按照指定的格式,從String對象轉換爲Date對象。
因爲DateFormat爲抽象類,不能直接使用,因此須要經常使用的子類java.text.SimpleDateFormat
。
這個類須要一個模式(格式)來指定格式化或解析的標準。構造方法爲:
public SimpleDateFormat(String pattern)
:用給定的模式和默認語言環境的日期格式符號構造SimpleDateFormat。參數pattern是一個字符串,表明日期時間的自定義格式。
構造方法摘要 | 描述 |
---|---|
SimpleDateFormat() | 用默認的模式和默認語言環境的日期格式符號構造 SimpleDateFormat。 |
SimpleDateFormat(String pattern) * | 用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat。 |
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) | 用給定的模式和日期符號構造 SimpleDateFormat。 |
SimpleDateFormat(String pattern, Locale locale) | 用給定的模式和給定語言環境的默認日期格式符號構造 SimpleDateFormat。 |
經常使用的格式規則爲:
標識字母(區分大小寫) | 含義 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 時 |
m | 分 |
s | 秒 |
DateFormat類的經常使用方法有:
public String format(Date date)
:將Date對象格式化爲字符串。public Date parse(String source)
:將字符串解析爲Date對象。方法摘要 | 描述 |
---|---|
Date parse(String text, ParsePosition pos) | 解析字符串的文本,生成 Date。 |
String toPattern() | 返回描述此日期格式的模式字符串。 |
void applyPattern(String pattern) | 將給定模式字符串應用於此日期格式。 |
void applyLocalizedPattern(String pattern) | 將給定的本地化模式字符串應用於此日期格式。 |
Object clone() | 建立此 SimpleDateFormat 的一個副本。 |
boolean equals(Object obj) | 比較給定對象與此 SimpleDateFormat 的相等性。 |
int hashCode() | 返回此 SimpleDateFormat 對象的哈希碼值。 |
StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) | 將給定的 Date 格式化爲日期/時間字符串,並將結果添加到給定的 StringBuffer。 |
AttributedCharacterIterator formatToCharacterIterator(Object obj) | 格式化生成 AttributedCharacterIterator 的對象。 |
Date get2DigitYearStart() | 返回在 100 年週期內被解釋的兩位數字年份的開始日期。 |
DateFormatSymbols getDateFormatSymbols() | 獲取此日期格式的日期和時間格式符號的一個副本。 |
void set2DigitYearStart(Date startDate) | 設置 100 年週期的兩位數年份,該年份將被解釋爲從用戶指定的日期開始。 |
void setDateFormatSymbols(DateFormatSymbols newFormatSymbols) | 設置此日期格式的日期和時間格式符號。 |
String toLocalizedPattern() | 返回描述此日期格式的本地化模式字符串。 |
package com; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDateFormatTest { public static void main(String[] args) { // **格式化** 日期轉換爲文本 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = dateFormat.format(new Date()); System.out.println(str); //**解析** 將文本轉爲日期 try { Date date = dateFormat.parse(str); System.out.println(date); } catch (ParseException e) { System.out.println("解析異常"); } } }
請使用日期時間相關的API,計算出一我的已經出生了多少天。
思路:
1.獲取當前時間對應的毫秒值
2.獲取本身出生日期對應的毫秒值
3.兩個時間相減(當前時間– 出生日期)
代碼實現:
public static void function() throws Exception { System.out.println("請輸入出生日期 格式 YYYY-MM-dd"); // 獲取出生日期,鍵盤輸入 String birthdayString = new Scanner(System.in).next(); // 將字符串日期,轉成Date對象 // 建立SimpleDateFormat對象,寫日期模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 調用方法parse,字符串轉成日期對象 Date birthdayDate = sdf.parse(birthdayString); // 獲取今天的日期對象 Date todayDate = new Date(); // 將兩個日期轉成毫秒值,Date類的方法getTime long birthdaySecond = birthdayDate.getTime(); long todaySecond = todayDate.getTime(); long secone = todaySecond-birthdaySecond; if (secone < 0){ System.out.println("還沒出生呢"); } else { System.out.println(secone/1000/60/60/24); } }
java.util.Calendar
是日曆類,在Date後出現,替換掉了許多Date的方法。
該類將全部可能用到的時間信息封裝爲靜態成員變量,方便獲取。日曆類就是方便獲取各個時間屬性的。
Calendar爲抽象類,因爲語言敏感性,Calendar類在建立對象時並不是直接建立,而是經過靜態方法建立,返回子類對象。
Calendar靜態方法
public static Calendar getInstance()
:使用默認時區和語言環境得到一個日曆例如:
package com; import java.util.Calendar; public class CalendarTest { public static void main(String[] args) { Calendar c = Calendar.getInstance(); System.out.println(c); } }
Calendar類中提供不少成員常量,表明給定的日曆字段:
字段值 | 含義 |
---|---|
YEAR | 年 |
MONTH | 月(從0開始,能夠+1使用) |
DAY_OF_MONTH | 月中的天(幾號) |
DATE | get 和 set 的字段數字,指示一個月中的某天。 |
HOUR | 時(12小時制) |
HOUR_OF_DAY | 時(24小時制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 週中的天(周幾,週日爲1,能夠-1使用) |
DAY_OF_MONTH | get 和 set 的字段數字,指示一個月中的某天。 |
DAY_OF_YEAR | get 和 set 的字段數字,指示當前年中的天數。 |
DAY_OF_WEEK_IN_MONTH | get 和 set 的字段數字,指示當前月中的第幾個星期。 |
AUGUST | 指示在格里高利曆和羅馬儒略曆中一年中第八個月的 MONTH 字段值。 |
areFieldsSet | 若是 fields[] 與當前的設置時間同步,則返回 true。 |
APRIL | 指示在格里高利曆和羅馬儒略曆中一年中第四個月的 MONTH 字段值。 |
AM_PM | get 和 set 的字段數字,指示 HOUR 是在中午以前仍是在中午以後。 |
AM | 指示從午夜到中午以前這段時間的 AM_PM 字段值。 |
ALL_STYLES | 指示全部風格名稱的 getDisplayNames 的風格說明符,好比 "January" 和 "Jan"。 |
根據Calendar類的API文檔,經常使用方法有:
public int get(int field)
:返回給定日曆字段的值。public void set(int field, int value)
:將給定的日曆字段設置爲給定值。public abstract void add(int field, int amount)
:根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。public Date getTime()
:返回一個表示此Calendar時間值(從曆元到如今的毫秒偏移量)的Date對象。方法 | 描述 |
---|---|
int get(int field) | 返回給定日曆字段的值。 字段能夠用上面的靜態字段,如:Calendar.YEAR |
void set(int field, int value) | 將給定的日曆字段設置爲給定值。 |
abstract void add(int field, int amount) | 根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。 |
Date getTime() | 返回一個表示此 Calendar 時間值(從曆元至如今的毫秒偏移量)的 Date 對象。 |
boolean after(Object when) | 判斷此 Calendar 表示的時間是否在指定 Object 表示的時間以後,返回判斷結果。 |
boolean before(Object when) | 判斷此 Calendar 表示的時間是否在指定 Object 表示的時間以前,返回判斷結果。 |
void clear() | 將此 Calendar 的所日曆字段值和時間值(從曆元至如今的毫秒偏移量)設置成未定義。 |
void clear(int field) | 將此 Calendar 的給定日曆字段值和時間值(從曆元至如今的毫秒偏移量)設置成未定義。 |
Object clone() | 建立並返回此對象的一個副本。 |
int compareTo(Calendar anotherCalendar) | 比較兩個 Calendar 對象表示的時間值(從曆元至如今的毫秒偏移量)。 |
protected void complete() | 填充日曆字段中全部未設置的字段。 |
protected abstract void computeFields() | 將當前毫秒時間值 time 轉換爲 fields[] 中的日曆字段值。 |
protected abstract void computeTime() | 將 fields[] 中的當前日曆字段值轉換爲毫秒時間值 time。 |
boolean equals(Object obj) | 將此 Calendar 與指定 Object 比較。 |
int getActualMaximum(int field) | 給定此 Calendar 的時間值,返回指定日曆字段可能擁有的最大值。 |
int getActualMinimum(int field) | 給定此 Calendar 的時間值,返回指定日曆字段可能擁有的最小值。 |
static Locale[] getAvailableLocales() | 返回全部語言環境的數組,此類的 getInstance 方法能夠爲其返回本地化的實例。 |
String getDisplayName(int field, int style, Locale locale) | 返回給定 style 和 locale 下的日曆 field 值的字符串表示形式。 |
Map<String,Integer> getDisplayNames(int field, int style, Locale locale) | 返回給定 style 和 locale 下包含日曆 field 全部名稱的 Map 及其相應字段值。 |
int getFirstDayOfWeek() | 獲取一星期的第一天;例如,在美國,這一天是 SUNDAY,而在法國,這一天是 MONDAY。 |
abstract int getGreatestMinimum(int field) | 返回此 Calendar 實例給定日曆字段的最高的最小值。 |
static Calendar getInstance() | 使用默認時區和語言環境得到一個日曆。 |
static Calendar getInstance(Locale aLocale) | 使用默認時區和指定語言環境得到一個日曆。 |
static Calendar getInstance(TimeZone zone) | 使用指定時區和默認語言環境得到一個日曆。 |
static Calendar getInstance(TimeZone zone, Locale aLocale) | 使用指定時區和語言環境得到一個日曆。 |
abstract int getLeastMaximum(int field) | 返回此 Calendar 實例給定日曆字段的最低的最大值。 |
abstract int getMaximum(int field) | 返回此 Calendar 實例給定日曆字段的最大值。 |
int getMinimalDaysInFirstWeek() | 獲取一年中第一個星期所需的最少天數,例如,若是定義第一個星期包含一年第一個月的第一天,則此方法將返回 1。 |
abstract int getMinimum(int field) | 返回此 Calendar 實例給定日曆字段的最小值。 |
long getTimeInMillis() | 返回此 Calendar 的時間值,以毫秒爲單位。 |
TimeZone getTimeZone() | 得到時區。 |
int hashCode() | 返回該此日曆的哈希碼。 |
protected int internalGet(int field) | 返回給定日曆字段的值。 |
boolean isLenient() | 判斷日期/時間的解釋是否爲寬鬆的。 |
boolean isSet(int field) | 肯定給定日曆字段是否已經設置了一個值,其中包括由於調用 get 方法觸發內部字段計算而致使已經設置該值的狀況。 |
abstract void roll(int field, boolean up) | 在給定的時間字段上添加或減去(上/下)單個時間單元,不更改更大的字段。 |
void roll(int field, int amount) | 向指定日曆字段添加指定(有符號的)時間量,不更改更大的字段。 |
void set(int year, int month, int date) | 設置日曆字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 |
void set(int year, int month, int date, int hourOfDay, int minute) | 設置日曆字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 設置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 |
void setFirstDayOfWeek(int value) | 設置一星期的第一天是哪一天;例如,在美國,這一天是 SUNDAY,而在法國,這一天是 MONDAY。 |
void setLenient(boolean lenient) | 指定日期/時間解釋是不是寬鬆的。 |
void setMinimalDaysInFirstWeek(int value) | 設置一年中第一個星期所需的最少天數,例如,若是定義第一個星期包含一年第一個月的第一天,則使用值 1 調用此方法。 |
void setTime(Date date) | 使用給定的 Date 設置此 Calendar 的時間。 |
void setTimeInMillis(long millis) | 用給定的 long 值設置此 Calendar 的當前時間值。 |
void setTimeZone(TimeZone value) | 使用給定的時區值來設置時區。 |
String toString() | 返回此日曆的字符串表示形式。 |
package com; import java.util.Calendar; /** * Calendar類的經常使用方法 * 根據Calendar類的API文檔,經常使用方法有: * public int get(int field):返回給定日曆字段的值。 * public void set(int field, int value):將給定的日曆字段設置爲給定值。 * public abstract void add(int field, int amount):根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。 * public Date getTime():返回一個表示此Calendar時間值(從曆元到如今的毫秒偏移量)的Date對象。 */ public class CalendarTest { public static void main(String[] args) { Calendar c = Calendar.getInstance(); // get 獲取日曆的某個字段 System.out.println(c.get(Calendar.YEAR)); // 月份從0開始 System.out.println(c.get(Calendar.MONTH)); System.out.println(c.get(Calendar.DAY_OF_YEAR)); // set 設置日曆的某個字段 c.set(Calendar.YEAR,1995); System.out.println(c.getTime()); c.set(1999, Calendar.DECEMBER, 1); System.out.println(c.getTime()); // add 修改指定的字段,能夠是整數也能夠是負數 System.out.println("======add 加減====="); c.add(Calendar.YEAR,10); System.out.println(c.getTime()); // getTime 將日曆轉爲日期Date } }
小貼士:
西方星期的開始爲週日,中國爲週一。
在Calendar類中,月份的表示是以0-11表明1-12月。
日期是有大小關係的,時間靠後,時間越大。