Java中的日期時間處理及格式化處理
Date類
在java.util.Date包中封裝瞭許多現在的日期和時間,
構造函數:
Date類表示特定的時間,精確到毫秒。在Java1.1之前,Date類中有好幾個函數,允許把時間解釋成年月日分秒,也允許解析和格式化日期字符串,由於這些函數不能實現國際化,從Java1.1之後,使用 Calendar 類實現日期和時間字段之間轉換。
Date d=new Date(); //使用當前日期和時間來處理 Date d=new Date(long date); //以基準時間1970年1月1日經過參數date指定的毫秒數
Date類常用方法:
方法名 | 說明 |
---|---|
boolean after(Date date) | 返回此方法的對象是不是在指定日期之後 |
boolean before(Date date) | 返回此方法的對象是不是在指定日期之前 |
Object clone() | 返回此對象的副本 |
int compareTo(Date anotherDate) | 比較兩個指定日期,相等則等於0,調用對象在指定日期之後返回1,否則返回-1. |
boolean equals(Object obj) | 比較兩個日期的相等性 |
String toString() | 將Date對象以字符串形式輸出 |
long getTime | 返回從1970年1月1日次Date對象的毫秒數 |
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)); //判斷兩個對象相等 System.out.println(d.equals(d1)); //獲取當前時間的毫秒數 System.out.println(d1.getTime()); } }
結果
true
true
-1
false
1629430067783
例1,給定一個266600000的毫秒數,求出這個毫秒數代表幾天幾時幾分幾秒。
public class dome2{ public static void main(String[] args) { int date=266600000; date/=1000; //毫秒數轉化成秒 int day=date/86400; //一天有86400秒,計算有多少天 int hour=date%86400/3600; //一小時有3600秒,計算有多少個小時 int minute=date%86400%3600/60; //一分鐘60秒,計算有多少分鐘 int second=date%86400%3600%60; //計算最後的秒數 System.out.println(day+"天 "+hour+"時 "+minute+"分 "+second+"秒"); } }
結果
3天 2時 3分 20秒
Calendar 類
Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換提供瞭一些方法,並為操作日歷字段(例如獲得下星期的日期)提供瞭一些方法。Calendar類不能使用new關鍵字,它提供瞭一個 getInstance() 方法來獲得Calendar類的對象。
Calendar c=Calendar.getInstance(); //獲得對象
Calendar 類常用方法:
方法名 | 說明 |
---|---|
void add(int field, int amount) | 根據日歷的規則,為給定的日歷字段添加或減去指定的時間量。1則代表的是對年份操作,2是對月份操作,3是對星期操作,5是對日期操作,11是對小時操作,12是對分鐘操作,13是對秒操作,14是對毫秒操作 |
boolean after() | Calendar表示的時間是否在指定的時間之後。 |
boolean before() | Calendar表示的時間是否在指定的時間之前。 |
Date getTime() | 返回此calendar時間值的date對象 |
long getTimeInMillis() | 返回Calendar的時間值 |
void clear() | 清空Calendar類的日期和時間 |
Object clone() | 創建並返回一個副本 |
int compareTo(Calendar anotherCalendar) | 比較兩個Calendar類的時間值,大則返回1,小則返回-1,否則返回0 |
int get(int field) | 返回指定日歷的時間 |
int getFirstDayOfWeek() | 獲取一周的第一天,在美國,第一天是sunday,而在法國則monday。 |
static Calendar getInstance() | 使用默認時區和語言獲得一個日歷 |
int getActualMaximum(int field) | 返回指定日歷字段的最大值 |
int getActualMinimum(int field) | 返回指定日歷字段的最小值 |
void set(int field, int value) | 為指定的日歷字段設定指定值 |
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) | 設置一個星期的第一天是哪天 |
void setTimeInMillis(long millis) | 利用給定long值設置此時calendar的當前時間 |
Calendar字段:
Calendar類可以通過get方法獲取很多有關時間的值,在Calendar中定義瞭許多字段,也就是常量,不同的常量代表不同的時間名。
字段名 | 說明 |
---|---|
YEAR | 年份 |
MONTH | 月份,0代表1一月份,11代表12月份 |
DATE | 日期,一個月中的幾號 |
DAY_OF_MONTH | 與DATE相同,日期 |
HOUR | 十二小時制的幾時 |
HOUR_OF_DAY | 24小時制的幾時 |
MINUTE | 分鐘 |
SECOND | 秒 |
DAY_OF_WEEK | 一個星期的哪天,星期幾 |
AM_PM | 返回小時是在中午之前還是在中午之後,1代表下午,0代表上午 |
DAY_OF_YEAR | 返回當前年中的第多少天 |
WEEK_OF_YEAR | 一年當中的第幾個星期 |
WEEK_OF_MONTH | 一個月中的第幾個星期 |
Calendar類返回實例:
import java.util.Calendar; public class dome2{ public static void main(String[] args) { Calendar c=Calendar.getInstance(); System.out.println("返回當前時間:"+c.getTime()); System.out.println("返回當前年份:"+c.get(Calendar.YEAR)); System.out.println("返回當前月份:"+(c.get(Calendar.MONTH)+1)); System.out.println("返回當前的日"+c.get(Calendar.DATE)); System.out.println("返回當前星期幾:"+(c.get(Calendar.DAY_OF_WEEK)-1)); System.out.println("返回當前是一年中的第幾天:"+c.get(Calendar.DAY_OF_YEAR)); System.out.println("返回當前是一年中的第幾個星期:"+c.get(Calendar.WEEK_OF_YEAR)); System.out.println("返回當前是一個月中的第幾個星期:"+c.get(Calendar.WEEK_OF_MONTH)); System.out.println("返回當前的小時(十二小時制):"+c.get(Calendar.HOUR)); System.out.println("返回當前的小時(二十四小時制):"+c.get(Calendar.HOUR_OF_DAY)); System.out.println("返回當前是時間是多少分:"+c.get(Calendar.MINUTE)); System.out.println("返回當前時間的秒:"+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)+"月"); //設定的月份不用加1 str.append(c.get(Calendar.DATE)+"日"); str.append(c.get(Calendar.HOUR)+"時"); str.append(c.get(Calendar.MINUTE)+"分"); str.append(c.get(Calendar.SECOND)+"秒"); System.out.println(str.toString()); } }
結果
Wed Apr 01 15:05:23 CST 2020
2020年3月1日3時5分23秒
DateFormat 類
- DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。
- DateFormat 可幫助進行格式化並解析任何語言環境的日期。對於月、星期,甚至日歷格式(陰歷和陽歷),其代碼可完全與語言環境的約定無關。
- DateFormat 不能使用new關鍵字。要使用 DateFormat 類的getDateInstance()方法來創建對象。
DateFormat d=DateFormat.getInstance(); //創建對象
在DateFormat對象中使用方法來對時間和日期進行格式化,見圖。
方法名 | 說明 |
---|---|
String format(Date date) | 將Date的日期和時間格式化成字符串 |
Calendar getCalendar() | 返回當前時間日期相關的日歷 |
static DateFormat getDateInstance() | 返回默認語言格式化的日期,例如幾年幾月幾號 |
static DateFormat getDateInstance(int style) | 獲取指定的格式化日期的日歷,datestyle中:FULL表示幾年幾月幾號星期幾,MEDIUM和LONG表示幾年幾月幾日,SHORT表示Y/M/D |
static DateFormat getDateInstance(int style,Locale locale) | 獲取指定日期格式化風格和語言環境的日歷 |
static DateFormat getDateTimeInstance() | 獲取默認格式化風格和語言環境的日期時間格式,如幾年幾月幾日上午或上午hh:mm:ss |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) | 獲取指定格式化風格和語言環境的時間日期格式,timeStyle中:FULL表示中國標準時間 上午還是下午hh:mm:ss;SHORT和MEDIUM表示上午或下午hh:mm:ss;LONG表示CST 上午或下午hh:mm:ss |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) | 獲取指定日期時間格式風格和語言環境的日歷 |
static DateFormat getTimeInstance() | 獲取默認格式化風格和語言環境的時間格式 |
static DateFormat getTimeInstance(int style) | 獲取指定格式化風格和默認語言環境的時間格式,參照上面第七個的timeStyle格式方式 |
static DateFormat getTimeInstance(int style,Locale locale) | 獲取指定格式化風格和指定語言環境的時間格式 |
Date parse(String source) | 將字符串解析成日期/時間 |
例子:
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(); //創建指定日期格式和中國語言環境的日期格式 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); //創建指定時間格式和中國語言環境的時間格式 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); //返回指定風格和語言環境的日期 String s1=d1.format(new Date()); String s2=d2.format(new Date()); String s3=d3.format(new Date()); String s4=d4.format(new Date()); //返回指定風格和中國語言環境的時間 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); } }
結果
FULL的是:2021年8月21日星期六 中國標準時間 下午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 類時,隻有固定格式,在java.text.SimpleDateFormat包有一個以與語言環境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規范化。 SimpleDateFormat 使得可以選擇任何用戶定義的日期-時間格式的模式。
SimpleDateFormat 類基本構造方法:
SimpleDateFormat 類是DateFormat 類的一個子類。
- new SimpleDateFormat();默認模式和默認日期格式符號創造。
- SimpleDateFormat(String pattern);使用指定的模式和默認日期格式符號創造。
- SimpleDateFormat(String pattern, Locale locale);使用指定的模式和指定語言環境的默認日期符號構造。
DateFormat 也可以new SimpleDateFormat對象。有些方法還是建議通過 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 來創建日期-時間格式器。
DateFormat d=new SimpleDateFormat();
代表日期和時間的模式元素字母:
字母 | 含義 | 示例 |
---|---|---|
y | 年,一個y代表一位 | "yyy"代表019,"yyyy"代表2019 |
M | 月份 | 例如八月,M代表8,MM代表08 |
w | 一年中的第幾周 | 常用ww表示 |
W | 一個月中的第幾周 | 常用WW表示 |
d | 一個月中的第幾天 | 常用dd表示 |
D | 一年中的第幾天 | 常用DDD表示 |
E | 星期幾,用E表示星期,根據不同語言環境返回 | CHINA表示星期幾,US表示英文縮寫 |
a | 上午或下午 | am代表上午,pm代表下午 |
H | 一天中的小時數,二十四小時制 | 常用HH表示 |
h | 一天中的小時數,十二小時制 | 常用hh表示 |
m | 分鐘數 | 常用mm表示 |
s | 秒數 | 常用ss表示 |
S | 毫秒數 | 常用SSS表示 |
返回當前的時間
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時mm分ss秒SSS毫秒"); System.out.println(d.format(new Date())); } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java常用類之日期相關類使用詳解
- Java日期時間類(Date、DateFormat、Calendar)解析
- 基於Calendar獲取當前時間的性能比較
- Java中Date日期時間類具體使用
- 新手小白學JAVA 日期類Date SimpleDateFormat Calendar(入門)