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。

推薦閱讀: