日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java date 操作类_JAVA时间操作类常用方法汇总

發(fā)布時間:2025/3/20 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java date 操作类_JAVA时间操作类常用方法汇总 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、JAVA中日期的獲取、設置和格式化

(1)JAVA提供了3個日期類:Date、Calendar和DateFormat。

Date()方法主要用于創(chuàng)建日期對象并獲取日期;

Calendar()方法主要用于獲取和設置日期;

DateFormat()方法主要用于創(chuàng)建日期格式化器,然后再由格式化器將日期轉(zhuǎn)換為各種日期格式串輸出。

(2)JAVA語言規(guī)定的基準日期為格林尼治標準時間1970.1.1.00:00:00,當前日期是由基準日期開始所經(jīng)歷的毫秒數(shù)轉(zhuǎn)換出來的。

(3)DateFomat類在java.text包中,Date和Calendar類在java.util包中。

(4)實例如下:import?java.util.*;?import?java.text.*;

public?class?DisplayDate?{

public?static?void?main(String[]?args){

Date?today;

Calendar?now;

DateFormat?f1,f2;

String?s1,s2;

System.out.println("\n顯示Date類的相關用法");

today?=?new?Date();?System.out.println("new?Date()=?\t"+?today);

System.out.println("\n用DateFormat類顯示各種日期格式");

//顯示各種日期格式

f1?=?DateFormat.getDateInstance();?s1?=?f1.format(today);

System.out.println("DateFormat.getDateInstance()=?\t"+s1);

f1?=?DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)=

\t"+?s1);

f1?=?DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)=?\t"+?s1);

f1?=?DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)=

\t"?+?s1);

System.out.println("\n用DateFormat類顯示各種時間格式");

//顯示各種時間格式

f1?=?DateFormat.getTimeInstance();

s1?=?f1.format(today);

System.out.println("DateFormat.getTimeInstance()=?\t"+s1);

f1?=?DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)=

\t"+s1);

f1?=?DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)=?\t"+s1);

f1?=?DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);

s1?=?f1.format(today);

System.out.println("DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)=?\t"+s1);

System.out.println("\n顯示Calendar的相關時間用法");

now?=?Calendar.getInstance();?today?=?now.getTime();

System.out.println("Calendar.getInstance().getTime()=?\t"+

today.toString());

}

}

程序運行結(jié)果顯示如下:

顯示Date類的相關用法

new Date()= Fri May 02 13:29:32 CST 2003

用DateFormat類顯示各種日期格式

DateFormat.getDateInstance()= 2003-5-2

DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= 2003年5月2日

DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= 2003-5-2

DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= 03-5-2

用DateFormat類顯示各種時間格式

DateFormat.getTimeInstance()= 13:29:32

DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= 下午01時29分32秒

DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= 13:29:32

DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= 下午1:29

顯示Calendar的相關時間用法

Calendar.getInstance().getTime()= Fri May 02 13:29:33

CST 2003

2、SimpleDateFormat1. SimpleDateFormat 介紹????????SimpleDateFormat 是DateFormat的子類,一個格式化Date 以及 解析日期字符串 的工具。它的最常用途是,能夠按照指定的格式來對Date進行格式化,然后我們使用可以格式化Date后得到的字符串。

更嚴格的說,SimpleDateFormat 是一個以與語言環(huán)境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規(guī)范化。

SimpleDateFormat的構(gòu)造函數(shù):

構(gòu)造函數(shù)SimpleDateFormat()

SimpleDateFormat(String?pattern)

SimpleDateFormat(String?template,?DateFormatSymbols?value)

SimpleDateFormat(String?template,?Locale?locale)

非構(gòu)造函數(shù)void????applyLocalizedPattern(String?template)

void????applyPattern(String?template)

Object????clone()

boolean????equals(Object?object)

StringBuffer????format(Date?date,?StringBuffer?buffer,?FieldPosition?fieldPos)

AttributedCharacterIterator????formatToCharacterIterator(Object?object)

Date????get2DigitYearStart()

DateFormatSymbols????getDateFormatSymbols()

int????hashCode()

Date????parse(String?string,?ParsePosition?position)

void????set2DigitYearStart(Date?date)

void????setDateFormatSymbols(DateFormatSymbols?value)

String????toLocalizedPattern()

String????toPattern()

SimpleDateFormat 簡單示范://?新建date對象,時間是2013-09-19

Date?date?=?new?Date(113,8,19);

//?新建“SimpleDateFormat對象”,并設置?sdf?的“格式化模式”

SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd");

//?用?sdf?格式化?date,并返回字符串。

String?str?=?sdf.format(date);

2. SimpleDateFormat 相關格式說明

2.1 日期和時間模式????????日期和時間格式由日期和時間模式 字符串指定。在日期和時間模式字符串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' 被解釋為模式字母,用來表示日期或時間字符串元素。文本可以使用單引號 (') 引起來,以免進行解釋。"''" 表示單引號。所有其他字符均不解釋;只是在格式化時將它們簡單復制到輸出字符串,或者在解析時與輸入字符串進行匹配。

定義了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):字母日期或時間元素表示示例GEra 標志符TextAD

y年Year1996; 96

M年中的月份MonthJuly; Jul; 07

w年中的周數(shù)Number27

W月份中的周數(shù)Number2

D年中的天數(shù)Number189

d月份中的天數(shù)Number10

F月份中的星期Number2

E星期中的天數(shù)TextTuesday; Tue

aAm/pm 標記TextPM

H一天中的小時數(shù)(0-23)Number0

k一天中的小時數(shù)(1-24)Number24

Kam/pm 中的小時數(shù)(0-11)Number0

ham/pm 中的小時數(shù)(1-12)Number12

m小時中的分鐘數(shù)Number30

s分鐘中的秒數(shù)Number55

S毫秒數(shù)Number978

z時區(qū)General time zonePacific Standard Time; PST; GMT-08:00

Z時區(qū)RFC 822 time zone-0800

模式字母通常是重復的,其數(shù)量確定其精確表示:

Text: 對于格式化來說,如果模式字母的數(shù)量大于等于 4,則使用完全形式;否則,在可用的情況下使用短形式或縮寫形式。對于解析來說,兩種形式都是可接受的,與模式字母的數(shù)量無關。

Number: 對于格式化來說,模式字母的數(shù)量是最小的數(shù)位,如果數(shù)位不夠,則用 0 填充以達到此數(shù)量。對于解析來說,模式字母的數(shù)量被忽略,除非必須分開兩個相鄰字段。

Year: 如果格式器的 Calendar 是格里高利歷,則應用以下規(guī)則。

Month: 如果模式字母的數(shù)量為 3 或大于 3,則將月份解釋為 text;否則解釋為 number。

對于格式化來說,如果模式字母的數(shù)量為 2,則年份截取為 2 位數(shù),否則將年份解釋為 number。

對于解析來說,如果模式字母的數(shù)量大于 2,則年份照字面意義進行解釋,而不管數(shù)位是多少。因此使用模式 "MM/dd/yyyy",將 "01/11/12" 解析為公元 12 年 1 月 11 日。

在解析縮寫年份模式("y" 或 "yy")時,SimpleDateFormat 必須相對于某個世紀來解釋縮寫的年份。這通過將日期調(diào)整為 SimpleDateFormat 實例創(chuàng)建之前的 80 年和之后 20 年范圍內(nèi)來完成。例如,在 "MM/dd/yy" 模式下,如果 SimpleDateFormat 實例是在 1997 年 1 月 1 日創(chuàng)建的,則字符串 "01/11/12" 將被解釋為 2012 年 1 月 11 日,而字符串 "05/04/64" 將被解釋為 1964 年 5 月 4 日。在解析時,只有恰好由兩位數(shù)字組成的字符串(如 Character#isDigit(char) 所定義的)被解析為默認的世紀。其他任何數(shù)字字符串將照字面意義進行解釋,例如單數(shù)字字符串,3 個或更多數(shù)字組成的字符串,或者不都是數(shù)字的兩位數(shù)字字符串(例如"-1")。因此,在相同的模式下, "01/02/3" 或 "01/02/003" 解釋為公元 3 年 1 月 2 日。同樣,"01/02/-3" 解析為公元前 4 年 1 月 2 日。

否則,則應用日歷系統(tǒng)特定的形式。對于格式化和解析,如果模式字母的數(shù)量為 4 或大于 4,則使用日歷特定的 long form。否則,則使用日歷特定的 short or abbreviated form。

SimpleDateFormat 還支持本地化日期和時間模式 字符串。在這些字符串中,以上所述的模式字母可以用其他與語言環(huán)境有關的模式字母來替換。SimpleDateFormat 不處理除模式字母之外的文本本地化;而由類的客戶端來處理。

示例

以下示例顯示了如何在美國語言環(huán)境中解釋日期和時間模式。給定的日期和時間為美國太平洋時區(qū)的本地時間 2001-07-04 12:08:56。日期和時間模式結(jié)果"yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT

"EEE, MMM d, ''yy"Wed, Jul 4, '01

"h:mm a"12:08 PM

"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time

"K:mm a, z"0:08 PM, PDT

"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM

"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700

"yyMMddHHmmssZ"010704120856-0700

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700

日期格式是不同步的。建議為每個線程創(chuàng)建獨立的格式實例。如果多個線程同時訪問一個格式,則它必須是外部同步的。

3、部分方法實例

1.Calendar和Date的轉(zhuǎn)化(1) Calendar轉(zhuǎn)化為DateCalendar?cal=Calendar.getInstance();

Date?date=cal.getTime();

(2) ?Date轉(zhuǎn)化為CalendarDate?date=new?Date();

Calendar??cal=Calendar.getInstance();

cal.setTime(date);

2.格式化輸出日期時間及將日期轉(zhuǎn)換為字符串Date?date=new?Date();

SimpleDateFormat??df=new?SimpleDateFormat("yyyy-MM-dd?hh:mm:ss");

System.out.println(df.format(date));

String?dateStr?=?"2017-01-01?18:00:00";

SimpleDateFormat?df24?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");

System.out.println(df24.parse(dateStr));

3.計算某一月份的最大天數(shù)Calendar

time=Calendar.getInstance();

time.clear();

time.set(Calendar.YEAR,year);

time.set(Calendar.MONTH,i-1);//注意,Calendar對象默認一月為0

int

day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數(shù)

注:在使用set方法之前,必須先clear一下,否則很多信息會繼承自系統(tǒng)當前時間

4.計算一年中的第幾星期

(1)計算某一天是一年中的第幾星期Calendar?cal=Calendar.getInstance();

cal.set(Calendar.YEAR,?2006);

cal.set(Calendar.MONTH,?8);

cal.set(Calendar.DAY_OF_MONTH,?3);

int?weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)計算一年中的第幾星期是幾號SimpleDateFormat?df=new?SimpleDateFormat("yyyy-MM-dd");

Calendar?cal=Calendar.getInstance();

cal.set(Calendar.YEAR,?2006);

cal.set(Calendar.WEEK_OF_YEAR,?1);

cal.set(Calendar.DAY_OF_WEEK,?Calendar.MONDAY);

System.out.println(df.format(cal.getTime()));

//輸出:?2006-01-02

5.add()和roll()的用法

(1)add()方法SimpleDateFormat?df=new?SimpleDateFormat("yyyy-MM-dd");

Calendar?cal=Calendar.getInstance();

cal.set(Calendar.YEAR,?2006);

cal.set(Calendar.MONTH,?8);??//MONTH是從0開始計的,這里輸出是9月

cal.set(Calendar.DAY_OF_MONTH,?3);

cal.add(Calendar.DATE,?-4);

Date?date=cal.getTime();

System.out.println(df.format(date));

cal.add(Calendar.DATE,?4);

date=cal.getTime();

System.out.println(df.format(date));

//輸出:2006-08-30

//輸出:2006-09-03

(2)roll方法cal.set(Calendar.YEAR,?2006);

cal.set(Calendar.MONTH,?8);

cal.set(Calendar.DAY_OF_MONTH,?3);

cal.roll(Calendar.DATE,?-4);

date=cal.getTime();

System.out.println(df.format(date));

cal.roll(Calendar.DATE,?4);

date=cal.getTime();

System.out.println(df.format(date));

//輸出:2006-09-29

//輸出:2006-09-03

可見,roll()方法在本月內(nèi)循環(huán),一般使用add()方法;

6.計算兩個任意時間中間的間隔天數(shù)????????(1)傳進Calendar對象/*

*?計算兩個時間之間相隔天數(shù)

*?@param?startday?開始時間

*?@param?endday?結(jié)束時間

*?@return

*/

public?int?getIntervalDays(Calendar?startday,Calendar?endday){

//確保startday在endday之前

if(startday.after(endday)){

Calendar?cal=startday;

startday=endday;

endday=cal;

}

//分別得到兩個時間的毫秒數(shù)

long?sl=startday.getTimeInMillis();

long?el=endday.getTimeInMillis();

long?ei=el-sl;

//根據(jù)毫秒數(shù)計算間隔天數(shù)

return?(int)(ei/(1000*60*60*24));?}

(2)傳進Date對象/*

*計算兩個時間之間相隔天數(shù)

*?@param?startday?開始時間

*?@param?endday?結(jié)束時間

*?@return

*/

public?int?getIntervalDays(Date?startday,Date?endday){

//確保startday在endday之前

if(startday.after(endday)){

Date?cal=startday;

startday=endday;

endday=cal;

}

//分別得到兩個時間的毫秒數(shù)

long?sl=startday.getTime();

long?el=endday.getTime();

long?ei=el-sl;

//根據(jù)毫秒數(shù)計算間隔天數(shù)

return?(int)(ei/(1000*60*60*24));

}

//同理,可以用相同的方法計算出任意兩個時間相隔的小時數(shù),分鐘數(shù),秒鐘數(shù)等?注:以上方法是完全按時間計算,有時并不能令人滿意,如:

startday="2006-10-11?20:00:00"

endday="2006-10-12?8:00:00"

//計算結(jié)果為0,但是我們也許相讓計算結(jié)果變?yōu)?,此時可以用如下方法實現(xiàn):?在傳參之前,先設定endday的時間,如:

endday.set(Calendar.HOUR_OF_DAY,?23);

endday.set(Calendar.MINUTE,?59);

endday.set(Calendar.SECOND,?59);

endday.set(Calendar.MILLISECOND,?59);

//這樣再傳進去startday,endday,則結(jié)果就如我們所愿了。不過,如果嫌以上方法麻煩,可以參考以下方法:

(3)改進精確計算相隔天數(shù)的方法public?int?getDaysBetween?(Calendar?d1,?Calendar?d2)?{

if?(d1.after(d2))?{

//?swap?dates?so?that?d1?is?start?and?d2?is?end

java.util.Calendar?swap?=?d1;

d1?=?d2;

d2?=?swap;

}

int?days?=?d2.get(Calendar.DAY_OF_YEAR)?-?d1.get(Calendar.DAY_OF_YEAR);??????????????????int?y2?=?d2.get(Calendar.YEAR);

if?(d1.get(Calendar.YEAR)?!=?y2)?{

d1?=?(Calendar)?d1.clone();

do?{

days?+=?d1.getActualMaximum(Calendar.DAY_OF_YEAR);

//得到當年的實際天數(shù)

d1.add(Calendar.YEAR,?1);

}?while?(d1.get(Calendar.YEAR)?!=?y2);

}

return?days;

}

總結(jié)

以上是生活随笔為你收集整理的java date 操作类_JAVA时间操作类常用方法汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。