經常使用API - 時間日期類

Date類

概述

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

DateFormat類

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

Calendar類

概念

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月。

​ 日期是有大小關係的,時間靠後,時間越大。

相關文章
相關標籤/搜索