Java中的日期時(shí)間處理及格式化處理
Date類
在java.util.Date包中封裝了許多現(xiàn)在的日期和時(shí)間,
構(gòu)造函數(shù):
Date類表示特定的時(shí)間,精確到毫秒。在Java1.1之前,Date類中有好幾個(gè)函數(shù),允許把時(shí)間解釋成年月日分秒,也允許解析和格式化日期字符串,由于這些函數(shù)不能實(shí)現(xiàn)國際化,從Java1.1之后,使用 Calendar 類實(shí)現(xiàn)日期和時(shí)間字段之間轉(zhuǎn)換。
Date d=new Date(); //使用當(dāng)前日期和時(shí)間來處理 Date d=new Date(long date); //以基準(zhǔn)時(shí)間1970年1月1日經(jīng)過參數(shù)date指定的毫秒數(shù)
Date類常用方法:
方法名 | 說明 |
---|---|
boolean after(Date date) | 返回此方法的對象是不是在指定日期之后 |
boolean before(Date date) | 返回此方法的對象是不是在指定日期之前 |
Object clone() | 返回此對象的副本 |
int compareTo(Date anotherDate) | 比較兩個(gè)指定日期,相等則等于0,調(diào)用對象在指定日期之后返回1,否則返回-1. |
boolean equals(Object obj) | 比較兩個(gè)日期的相等性 |
String toString() | 將Date對象以字符串形式輸出 |
long getTime | 返回從1970年1月1日次Date對象的毫秒數(shù) |
import java.util.Date; public class dome2{ public static void main(String[] args) { Date d=new Date(1000000000); Date d1=new Date(); //d1在d之后 System.out.println(d1.after(d)); //d在d1之前 System.out.println(d.before(d1)); //判斷d在d1的什么位置 System.out.println(d.compareTo(d1)); //判斷兩個(gè)對象相等 System.out.println(d.equals(d1)); //獲取當(dāng)前時(shí)間的毫秒數(shù) System.out.println(d1.getTime()); } }
結(jié)果
true
true
-1
false
1629430067783
例1,給定一個(gè)266600000的毫秒數(shù),求出這個(gè)毫秒數(shù)代表幾天幾時(shí)幾分幾秒。
public class dome2{ public static void main(String[] args) { int date=266600000; date/=1000; //毫秒數(shù)轉(zhuǎn)化成秒 int day=date/86400; //一天有86400秒,計(jì)算有多少天 int hour=date%86400/3600; //一小時(shí)有3600秒,計(jì)算有多少個(gè)小時(shí) int minute=date%86400%3600/60; //一分鐘60秒,計(jì)算有多少分鐘 int second=date%86400%3600%60; //計(jì)算最后的秒數(shù) System.out.println(day+"天 "+hour+"時(shí) "+minute+"分 "+second+"秒"); } }
結(jié)果
3天 2時(shí) 3分 20秒
Calendar 類
Calendar 類是一個(gè)抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。Calendar類不能使用new關(guān)鍵字,它提供了一個(gè) getInstance() 方法來獲得Calendar類的對象。
Calendar c=Calendar.getInstance(); //獲得對象
Calendar 類常用方法:
方法名 | 說明 |
---|---|
void add(int field, int amount) | 根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量。1則代表的是對年份操作,2是對月份操作,3是對星期操作,5是對日期操作,11是對小時(shí)操作,12是對分鐘操作,13是對秒操作,14是對毫秒操作 |
boolean after() | Calendar表示的時(shí)間是否在指定的時(shí)間之后。 |
boolean before() | Calendar表示的時(shí)間是否在指定的時(shí)間之前。 |
Date getTime() | 返回此calendar時(shí)間值的date對象 |
long getTimeInMillis() | 返回Calendar的時(shí)間值 |
void clear() | 清空Calendar類的日期和時(shí)間 |
Object clone() | 創(chuàng)建并返回一個(gè)副本 |
int compareTo(Calendar anotherCalendar) | 比較兩個(gè)Calendar類的時(shí)間值,大則返回1,小則返回-1,否則返回0 |
int get(int field) | 返回指定日歷的時(shí)間 |
int getFirstDayOfWeek() | 獲取一周的第一天,在美國,第一天是sunday,而在法國則monday。 |
static Calendar getInstance() | 使用默認(rèn)時(shí)區(qū)和語言獲得一個(gè)日歷 |
int getActualMaximum(int field) | 返回指定日歷字段的最大值 |
int getActualMinimum(int field) | 返回指定日歷字段的最小值 |
void set(int field, int value) | 為指定的日歷字段設(shè)定指定值 |
void set(int year, int month, int date) | 設(shè)置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值 |
void set(int year, int month, int date, int hourOfDay, int minute) | 設(shè)置日歷字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 設(shè)置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 |
void setFirstDayOfWeek(int value) | 設(shè)置一個(gè)星期的第一天是哪天 |
void setTimeInMillis(long millis) | 利用給定long值設(shè)置此時(shí)calendar的當(dāng)前時(shí)間 |
Calendar字段:
Calendar類可以通過get方法獲取很多有關(guān)時(shí)間的值,在Calendar中定義了許多字段,也就是常量,不同的常量代表不同的時(shí)間名。
字段名 | 說明 |
---|---|
YEAR | 年份 |
MONTH | 月份,0代表1一月份,11代表12月份 |
DATE | 日期,一個(gè)月中的幾號 |
DAY_OF_MONTH | 與DATE相同,日期 |
HOUR | 十二小時(shí)制的幾時(shí) |
HOUR_OF_DAY | 24小時(shí)制的幾時(shí) |
MINUTE | 分鐘 |
SECOND | 秒 |
DAY_OF_WEEK | 一個(gè)星期的哪天,星期幾 |
AM_PM | 返回小時(shí)是在中午之前還是在中午之后,1代表下午,0代表上午 |
DAY_OF_YEAR | 返回當(dāng)前年中的第多少天 |
WEEK_OF_YEAR | 一年當(dāng)中的第幾個(gè)星期 |
WEEK_OF_MONTH | 一個(gè)月中的第幾個(gè)星期 |
Calendar類返回實(shí)例:
import java.util.Calendar; public class dome2{ public static void main(String[] args) { Calendar c=Calendar.getInstance(); System.out.println("返回當(dāng)前時(shí)間:"+c.getTime()); System.out.println("返回當(dāng)前年份:"+c.get(Calendar.YEAR)); System.out.println("返回當(dāng)前月份:"+(c.get(Calendar.MONTH)+1)); System.out.println("返回當(dāng)前的日"+c.get(Calendar.DATE)); System.out.println("返回當(dāng)前星期幾:"+(c.get(Calendar.DAY_OF_WEEK)-1)); System.out.println("返回當(dāng)前是一年中的第幾天:"+c.get(Calendar.DAY_OF_YEAR)); System.out.println("返回當(dāng)前是一年中的第幾個(gè)星期:"+c.get(Calendar.WEEK_OF_YEAR)); System.out.println("返回當(dāng)前是一個(gè)月中的第幾個(gè)星期:"+c.get(Calendar.WEEK_OF_MONTH)); System.out.println("返回當(dāng)前的小時(shí)(十二小時(shí)制):"+c.get(Calendar.HOUR)); System.out.println("返回當(dāng)前的小時(shí)(二十四小時(shí)制):"+c.get(Calendar.HOUR_OF_DAY)); System.out.println("返回當(dāng)前是時(shí)間是多少分:"+c.get(Calendar.MINUTE)); System.out.println("返回當(dāng)前時(shí)間的秒:"+c.get(Calendar.SECOND)); } }
例子:
public class dome2{ public static void main(String[] args) { Calendar c=Calendar.getInstance(); c.set(2020,3,1,15,5,23); Date date=c.getTime(); System.out.println(date); StringBuffer str=new StringBuffer(); str.append(c.get(Calendar.YEAR)+"年"); str.append(c.get(Calendar.MONTH)+"月"); //設(shè)定的月份不用加1 str.append(c.get(Calendar.DATE)+"日"); str.append(c.get(Calendar.HOUR)+"時(shí)"); str.append(c.get(Calendar.MINUTE)+"分"); str.append(c.get(Calendar.SECOND)+"秒"); System.out.println(str.toString()); } }
結(jié)果
Wed Apr 01 15:05:23 CST 2020
2020年3月1日3時(shí)5分23秒
DateFormat 類
- DateFormat 是日期/時(shí)間格式化子類的抽象類,它以與語言無關(guān)的方式格式化并解析日期或時(shí)間。日期/時(shí)間格式化子類(如 SimpleDateFormat)允許進(jìn)行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標(biāo)準(zhǔn)化。
- DateFormat 可幫助進(jìn)行格式化并解析任何語言環(huán)境的日期。對于月、星期,甚至日歷格式(陰歷和陽歷),其代碼可完全與語言環(huán)境的約定無關(guān)。
- DateFormat 不能使用new關(guān)鍵字。要使用 DateFormat 類的getDateInstance()方法來創(chuàng)建對象。
DateFormat d=DateFormat.getInstance(); //創(chuàng)建對象
在DateFormat對象中使用方法來對時(shí)間和日期進(jìn)行格式化,見圖。
方法名 | 說明 |
---|---|
String format(Date date) | 將Date的日期和時(shí)間格式化成字符串 |
Calendar getCalendar() | 返回當(dāng)前時(shí)間日期相關(guān)的日歷 |
static DateFormat getDateInstance() | 返回默認(rèn)語言格式化的日期,例如幾年幾月幾號 |
static DateFormat getDateInstance(int style) | 獲取指定的格式化日期的日歷,datestyle中:FULL表示幾年幾月幾號星期幾,MEDIUM和LONG表示幾年幾月幾日,SHORT表示Y/M/D |
static DateFormat getDateInstance(int style,Locale locale) | 獲取指定日期格式化風(fēng)格和語言環(huán)境的日歷 |
static DateFormat getDateTimeInstance() | 獲取默認(rèn)格式化風(fēng)格和語言環(huán)境的日期時(shí)間格式,如幾年幾月幾日上午或上午hh:mm:ss |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) | 獲取指定格式化風(fēng)格和語言環(huán)境的時(shí)間日期格式,timeStyle中:FULL表示中國標(biāo)準(zhǔn)時(shí)間 上午還是下午hh:mm:ss;SHORT和MEDIUM表示上午或下午hh:mm:ss;LONG表示CST 上午或下午hh:mm:ss |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) | 獲取指定日期時(shí)間格式風(fēng)格和語言環(huán)境的日歷 |
static DateFormat getTimeInstance() | 獲取默認(rèn)格式化風(fēng)格和語言環(huán)境的時(shí)間格式 |
static DateFormat getTimeInstance(int style) | 獲取指定格式化風(fēng)格和默認(rèn)語言環(huán)境的時(shí)間格式,參照上面第七個(gè)的timeStyle格式方式 |
static DateFormat getTimeInstance(int style,Locale locale) | 獲取指定格式化風(fēng)格和指定語言環(huán)境的時(shí)間格式 |
Date parse(String source) | 將字符串解析成日期/時(shí)間 |
例子:
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class dome2{ public static void main(String[] args) { DateFormat d=DateFormat.getInstance(); //創(chuàng)建指定日期格式和中國語言環(huán)境的日期格式 DateFormat d1=d.getDateInstance(DateFormat.FULL,Locale.CHINA); DateFormat d2=d.getDateInstance(DateFormat.LONG,Locale.CHINA); DateFormat d3=d.getDateInstance(DateFormat.SHORT,Locale.CHINA); DateFormat d4=d.getDateInstance(DateFormat.MEDIUM,Locale.CHINA); //創(chuàng)建指定時(shí)間格式和中國語言環(huán)境的時(shí)間格式 DateFormat d5=d.getTimeInstance(DateFormat.FULL,Locale.CHINA); DateFormat d6=d.getTimeInstance(DateFormat.LONG,Locale.CHINA); DateFormat d7=d.getTimeInstance(DateFormat.SHORT,Locale.CHINA); DateFormat d8=d.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA); //返回指定風(fēng)格和語言環(huán)境的日期 String s1=d1.format(new Date()); String s2=d2.format(new Date()); String s3=d3.format(new Date()); String s4=d4.format(new Date()); //返回指定風(fēng)格和中國語言環(huán)境的時(shí)間 String s5=d5.format(new Date()); String s6=d6.format(new Date()); String s7=d7.format(new Date()); String s8=d8.format(new Date()); System.out.println("FULL的是:"+s1+"\t"+s5); System.out.println("LONG的是:"+s2+"\t"+s6); System.out.println("SHORT的是:"+s3+"\t"+s7); System.out.println("MEDIUM的是:"+s4+"\t"+s8); } }
結(jié)果
FULL的是:2021年8月21日星期六 中國標(biāo)準(zhǔn)時(shí)間 下午8:49:44
LONG的是:2021年8月21日 CST 下午8:49:44
SHORT的是:2021/8/21 下午8:49
MEDIUM的是:2021年8月21日 下午8:49:44
SimpleDateFormat 類
在使用DateFormat 類時(shí),只有固定格式,在java.text.SimpleDateFormat包有一個(gè)以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類。它允許進(jìn)行格式化(日期 -> 文本)、解析(文本 -> 日期)和規(guī)范化。 SimpleDateFormat 使得可以選擇任何用戶定義的日期-時(shí)間格式的模式。
SimpleDateFormat 類基本構(gòu)造方法:
SimpleDateFormat 類是DateFormat 類的一個(gè)子類。
- new SimpleDateFormat();默認(rèn)模式和默認(rèn)日期格式符號創(chuàng)造。
- SimpleDateFormat(String pattern);使用指定的模式和默認(rèn)日期格式符號創(chuàng)造。
- SimpleDateFormat(String pattern, Locale locale);使用指定的模式和指定語言環(huán)境的默認(rèn)日期符號構(gòu)造。
DateFormat 也可以new SimpleDateFormat對象。有些方法還是建議通過 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 來創(chuàng)建日期-時(shí)間格式器。
DateFormat d=new SimpleDateFormat();
代表日期和時(shí)間的模式元素字母:
字母 | 含義 | 示例 |
---|---|---|
y | 年,一個(gè)y代表一位 | "yyy"代表019,"yyyy"代表2019 |
M | 月份 | 例如八月,M代表8,MM代表08 |
w | 一年中的第幾周 | 常用ww表示 |
W | 一個(gè)月中的第幾周 | 常用WW表示 |
d | 一個(gè)月中的第幾天 | 常用dd表示 |
D | 一年中的第幾天 | 常用DDD表示 |
E | 星期幾,用E表示星期,根據(jù)不同語言環(huán)境返回 | CHINA表示星期幾,US表示英文縮寫 |
a | 上午或下午 | am代表上午,pm代表下午 |
H | 一天中的小時(shí)數(shù),二十四小時(shí)制 | 常用HH表示 |
h | 一天中的小時(shí)數(shù),十二小時(shí)制 | 常用hh表示 |
m | 分鐘數(shù) | 常用mm表示 |
s | 秒數(shù) | 常用ss表示 |
S | 毫秒數(shù) | 常用SSS表示 |
返回當(dāng)前的時(shí)間
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class dome2{ public static void main(String[] args) { DateFormat d=new SimpleDateFormat("yyyy年MM月dd日HH時(shí)mm分ss秒SSS毫秒"); System.out.println(d.format(new Date())); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Eclipse自定義啟動(dòng)畫面和圖標(biāo)的方法介紹
這篇文章主要介紹了Eclipse自定義啟動(dòng)畫面和圖標(biāo)的方法介紹,以及一些eclipse的快捷鍵,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringMVC實(shí)現(xiàn)表單驗(yàn)證功能詳解
這篇文章主要為大家詳細(xì)介紹了SpringMVC 表單驗(yàn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截
本文主要介紹了Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截,包含針對用戶IP限流,整個(gè)接口的訪問限流,以及對某個(gè)參數(shù)字段的限流,并且支持請求限流后處理回調(diào),感興趣的可以了解一下2024-02-02淺談@mapper引入不到引入的是@MapperScan的問題
這篇文章主要介紹了淺談@mapper引入不到引入的是@MapperScan的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出
這篇文章主要介紹了Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出,需要的朋友可以參考下2015-10-10JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作
這篇文章主要介紹了JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08