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) | 返回此方法的對(duì)象是不是在指定日期之后 |
| boolean before(Date date) | 返回此方法的對(duì)象是不是在指定日期之前 |
| Object clone() | 返回此對(duì)象的副本 |
| int compareTo(Date anotherDate) | 比較兩個(gè)指定日期,相等則等于0,調(diào)用對(duì)象在指定日期之后返回1,否則返回-1. |
| boolean equals(Object obj) | 比較兩個(gè)日期的相等性 |
| String toString() | 將Date對(duì)象以字符串形式輸出 |
| long getTime | 返回從1970年1月1日次Date對(duì)象的毫秒數(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è)對(duì)象相等
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類的對(duì)象。
Calendar c=Calendar.getInstance(); //獲得對(duì)象
Calendar 類常用方法:
| 方法名 | 說明 |
|---|---|
| void add(int field, int amount) | 根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量。1則代表的是對(duì)年份操作,2是對(duì)月份操作,3是對(duì)星期操作,5是對(duì)日期操作,11是對(duì)小時(shí)操作,12是對(duì)分鐘操作,13是對(duì)秒操作,14是對(duì)毫秒操作 |
| boolean after() | Calendar表示的時(shí)間是否在指定的時(shí)間之后。 |
| boolean before() | Calendar表示的時(shí)間是否在指定的時(shí)間之前。 |
| Date getTime() | 返回此calendar時(shí)間值的date對(duì)象 |
| 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è)月中的幾號(hào) |
| 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)境的日期。對(duì)于月、星期,甚至日歷格式(陰歷和陽歷),其代碼可完全與語言環(huán)境的約定無關(guān)。
- DateFormat 不能使用new關(guān)鍵字。要使用 DateFormat 類的getDateInstance()方法來創(chuàng)建對(duì)象。
DateFormat d=DateFormat.getInstance(); //創(chuàng)建對(duì)象
在DateFormat對(duì)象中使用方法來對(duì)時(shí)間和日期進(jìn)行格式化,見圖。
| 方法名 | 說明 |
|---|---|
| String format(Date date) | 將Date的日期和時(shí)間格式化成字符串 |
| Calendar getCalendar() | 返回當(dāng)前時(shí)間日期相關(guān)的日歷 |
| static DateFormat getDateInstance() | 返回默認(rèn)語言格式化的日期,例如幾年幾月幾號(hào) |
| static DateFormat getDateInstance(int style) | 獲取指定的格式化日期的日歷,datestyle中:FULL表示幾年幾月幾號(hào)星期幾,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)日期格式符號(hào)創(chuàng)造。
- SimpleDateFormat(String pattern);使用指定的模式和默認(rèn)日期格式符號(hào)創(chuàng)造。
- SimpleDateFormat(String pattern, Locale locale);使用指定的模式和指定語言環(huán)境的默認(rèn)日期符號(hào)構(gòu)造。
DateFormat 也可以new SimpleDateFormat對(duì)象。有些方法還是建議通過 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-11
SpringBoot中的PUT和Delete請(qǐng)求使用
這篇文章主要介紹了SpringBoot中的PUT和Delete請(qǐng)求使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringMVC實(shí)現(xiàn)表單驗(yàn)證功能詳解
這篇文章主要為大家詳細(xì)介紹了SpringMVC 表單驗(yàn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截
本文主要介紹了Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截,包含針對(duì)用戶IP限流,整個(gè)接口的訪問限流,以及對(duì)某個(gè)參數(shù)字段的限流,并且支持請(qǐng)求限流后處理回調(diào),感興趣的可以了解一下2024-02-02
淺談@mapper引入不到引入的是@MapperScan的問題
這篇文章主要介紹了淺談@mapper引入不到引入的是@MapperScan的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出
這篇文章主要介紹了Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出,需要的朋友可以參考下2015-10-10
JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作
這篇文章主要介紹了JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Jmeter生成UUID作為唯一標(biāo)識(shí)符過程圖解
這篇文章主要介紹了Jmeter生成UUID作為唯一標(biāo)識(shí)符過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

