Java的Date類與Calendar類

2021-08-15 06:59:22 字數 4506 閱讀 5553

一:date類

在jdk1.0中,date類是唯一的乙個代表時間的類,但是由於date類不便於實現國際化,所以從jdk1.1版本開始,推薦使用calendar類進行時間和日期處理。這裡簡單介紹一下date類的使用。

1.使用date類代表當前系統時間

date date = new date(); 

system.out.println(date);

使用date類的預設構造方法建立出來的物件就代表當前的時間,由於date類覆蓋了tostring()方法。所以可以直接輸出date型別的物件,顯示的結果如下:

sun aug 28 10:23:06 cst 2016

在該格式中,sun代表sunday(週日),aug 代表august(八月),28代表288號,cst代表china standard time(中國標準時間,也就是北京時間(東八區))。

2.使用date類代表指定時間

date date = new date(2016-1900,8-1,28); 

system.out.println(date);

使用帶參的構造方法,可以構造指定日期的date類物件,date類中年份的引數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以後的值。顯示結果如下:

sun aug 28 00:00:00 cst 2016  代表的日期就是2023年8月28號

3.獲取date物件中的資訊

@suppresswarnings("all")

public class testmain

}

使用date類中的get方法,可以獲得date類物件的相關資訊(但可以看出,date類中的這些方法都已經過時)。需要注意的是使用getyear獲得的是date物件中年份減去1900以後的值,所以需要顯示對應的年份則需要在返回值的基礎上加1900,月份類似。在date類中還提供了getday方法,用於獲得date物件代表的時間是星期幾,date類規定週日是0,周一是1,周二是2,後續的依次類推。

4.date物件和相對時間的互轉

date date = new date(2016-1900,8-1,28); 

long time = 1290876532190l;

long t = date.gettime(); //自2023年1月1日00:00:00 gmt 以來此日期表示的毫秒數

system.out.println(t); //結果是:1472313600000

date da = new date(time);

system.out.println(da); //結果是:sun aug 28 00:00:00 cst 2016

unix時間戳:單位是秒

毫秒時間戳 = 單位是毫秒(unix時間戳 * 1000)

date.gettime()

毫秒時間戳

date.gettime()/1000 返回的就是unix時間戳,和mysql的unix_timestamp函式是乙個意思,表示2023年1月1日00:00:00 gmt以來此date物件表示的

秒數,如果某個欄位是date型別,那麼返回@responsebody將會序列化成對應的date.gettime()

時間戳:返回自 2023年1月1日00:00:00gmt以來此 date 物件表示的

秒數

calendar nextday = calendar.getinstance();

nextday.add(calendar.day_of_year, 1);

nextday.set(calendar.hour_of_day, 23);

nextday.set(calendar.second, 59);

nextday.set(calendar.minute, 59);

// long timeinmillis =(nextday.gettimeinmillis()-system.currenttimemillis());

// this.getredismanager().expire(key, timeinmillis.intvalue()/1000);

this.getredismanager().expireat(key, nextday.gettime().gettime()/1000l);

5.date物件之間的比較

date date = new date( 2016-1900, 8-1, 28 );

date date1 = new date();

system.out.println( date.compareto( date1 ) );//返回int型別。如果等於0,則date=date1;如果小於0,則 date二:calendar類

從jdk1.1版本開始,在處理日期和時間時,系統推薦使用calendar類進行實現(date的一些方法都過時了)。在設計上,calendar類的功能要比date類強大很多,而且在實現方式上也比date類要複雜一些,下面就介紹一下calendar類的使用。

calender類是乙個抽象類,在實際使用時實現特定的子類的物件,建立物件的過程對程式設計師來說是透明的,只需要使用getinstance()方法建立即可。

1.使用calendar類代表當前時間

calendar c = calendar.getinstance();

由於calendar類是抽象類,且calendar類的構造方法是protected的,所以無法使用calendar類的構造方法來建立物件,api中提供了getinstance方法用來建立物件。使用該方法獲得的calendar物件就代表當前的系統時間,由於calendar類tostring實現的沒有date類那麼直觀,所以直接輸出calendar類的物件意義不大。

2.使用calendar類代表指定的時間

calendar c1 = calendar.getinstance();

c1.set(2016,8-1,28);

使用過calendar類代表特定的時間,需要首先建立乙個calendar的物件,然後在設定該物件中的年月日引數來完成。

set方法的宣告為:public final void set(int year,int month,int date)

以上示例**設定的時間為2023年8月28日,其引數的結構和date類不一樣。calendar類中年份的數值直接書寫,月份的值為實際的月份值減1,日期的值就是實際的日期值。

如果只設定某個字段某個字段,例如日期的值,則可以使用如下set方法:

public void set(int field,int value)

在該方法中,引數field代表要設定的字段的型別,常見型別如下:

calendar.year---年份;calendar.month---月份; calendar.date---日期; calendar.day_of_month---日期,和  calendar.date欄位完全相同;

calendar.hour---12小時制的小時數;calendar.hour_of_day---24小時制的小時數;calendar.minute---分鐘;calendar.second---秒;calendar.day_of_week---星期幾。

後續的引數value代表設定成的值。例如:c1.set(calendar.date,10);該**的作用是將c1物件代表的時間中日期設定為10號,其它所有的數值會被重新計算,例如星期幾以及對應的相對時間數值等。

3.獲得calendar類中的資訊

@suppresswarnings("all")

public class testmain ;// 一年當中的每個月的數目

int count = 0;

system.out.println( year + "年" + (month + 1) + "月" + day + "日" );

system.out.println( "sun\t" + "mon\t" + "tue\t" + "wed\t" + "thu\t" + "fri\t" + "sat\t" );

while (week0 != 0)

if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))

month[ 1 ] = 29;

for (int i = 0; i < month[ month ]; i++)

轉至:

calendar和date的轉化

(1) calendar轉化為date

calendar cal=calendar.getinstance();

date date=cal.gettime();

(2) date轉化為calendar

date date=new

date();

calendar cal=calendar.getinstance();

cal.settime(date);

JAVA中的Date類與Calendar類

calendar類 1.calendar類不能呼叫建構函式,只能使用單例模式來操作,例如 calendar test calendar.getinstance 並且只能用在static方法下。2.calendar預設是獲取當前系統距離1970年1月一日到現在的時間,可以通過test.gettime ...

JAVA常見類(十一)Date類

public date 根據當前的預設毫秒值建立物件。public date long date 根據給定的毫秒值建立物件。public long gettime 獲取時間,以毫秒為單位。public void settime 設定時間,以毫秒為單位。dateformat 可以進行日期和字串的格式化...

Java實現乙個Date類

日期類 根據需求列出功能列表 1.傳 年 月 日 構造日期類 2.在當前日期上增加多少天 3.在當前日期上減少多少天 4.可以返回字串 string 的方法 2019 5 30 5.加一些限制 年支援的範圍 1900,2100 6.如果給定兩個日期,計算兩個日期之間相差多少天 設計屬性 1.年 月 ...