在Java程序中與日期相關的類包括java.util.Date類、java.text.SimpleDateFormat類、java.util.calendar類和
java.util.GregorianCalendar類。在這裡我們只是簡單地介紹Date類、SimpleDateFormat類和calendar類的使用。
在程序開發中,經常需要處理日期和時間的相關數據,此時我們可以使用java.util包中的Date類。這個類最主要
的作用就是獲取當前時間。java.util包提供了Date類來封裝當前的日期和時間。
Date類提供兩個構造函數來實例化Date對象:
1)第一個構造函數使用當前日期和時間來初始化對象:
Date( )
2)第二個構造函數接收一個參數,該參數是從1970年1月1日起的微秒數:
Date(long millisec)
Date對象創建以後,可以調用下面的方法:
我們來看下Date類的使用,Java中獲取當前日期和時間很簡單,使用Date對象的toString()方法來打印當前日期和
時間,如下所示:
實例代碼為:
import java.util.*; public class Test{ public static void main(String[] args){ //初始化Date對象 Date d = new Date(); //直接輸出日期時間 System.out.println(d); //使用toString()函數顯示日期時間 System.out.println(d.toString()); } }使用Date類的默認無參構造方法創建出的對象就代表當前時間,我們可以直接輸出Date對象顯示當前的時間,也
可以使用Date對象的toString()方法來打印當前日期和時間顯示的結果如下:
其中,Mon代表Monday(星期一), Mar代表March(三月),28代表28號, CST代表China Standard Time(中國標
准時間,也就是北京時間,東八區),2016代表2016年。
Java使用以下三種方法來比較兩個日期:
1)使用getTime( )方法獲取兩個日期(自1970年1月1日經歷的微妙數值),然後比較這兩個值。
2)使用方法before(),after()和equals()。例如,一個月的12號比18號早,則newDate(99, 2, 12).before(new Date
(99, 2, 18))返回true。
3)使用compareTo()方法,它是由Comparable接口定義的,Date類實現了這個接口。
從上面的輸出結果中,我們發現,默認的時間格式不是很友好,與我們日常看到的日期格式不太一樣,如果想要
按指定的格式進行顯示,如2016-03-11 09:22:30 ,那該怎麼做呢?
SimpleDateFormat類是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat類允許你選擇任
何用戶自定義日期時間格式來運行。此時就到了java.text包中的SimpleDateFormat類,可以使用 SimpleDateFormat類
來對日期時間進行格式化,如可以將日期轉換為指定格式的文本,也可將文本轉換為日期。
實例代碼為:
import java.util.*; import java.text.*; public class Test{ public static void main(String[] args) throws ParseException{ //創建日期格式的字符串 Date d = new Date(); //創建SimpleDateFormat對象,指定目標格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //調用format()方法,格式化時間,轉換為指定格式字符串 String day = sdf.format(d); //輸出轉換後的字符串 System.out.println("當前時間:"+ day); } }代碼中的"yyyy-MM-dd HH:mm:ss"為預定義格式化字符串, yyyy表示四位年, MM表示兩位月份,dd表示兩位日
期,HH表示小時(使用24小時制), mm表示分鐘, ss表示秒,這樣就指定了轉換的目標格式,最後調用format()方法
將時間轉換為指定的格式的字符串。
運行結果:
實例代碼:
import java.util.*; import java.text.*; public class Test{ public static void main(String[] args) throws ParseException{ //創建日期格式的字符串 String day = "2016年03月01日 10:30:25"; //創建SimpleDateFormat對象,指定目標格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //調用parse()方法,將字符串轉換為日期 Date date = sdf.parse(day); //輸出轉換後的字符串 System.out.println(date); } }代碼中的"yyyy年MM月dd日 HH:mm:ss"指定了字符串的日期格式,調用parse()方法將文本轉換為日期。
運行結果:
1)調用SimpleDateFormat對象的parse()方法時可能會出現轉換異常,即ParseException,因此需要進行異常處
理,因此這個方法並不會經常使用。
2)使用Date類時需要導入java.util包,使用SimpleDateFormat時需要導入java.text包。
實例代碼:
import java.util.*; import java.text.*; public class Test{ public static void main(String[] args) throws ParseException{ //使用format()方法將日期轉換為指定格式的文本 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm"); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //創建Date對象,表示當前時間 Date now=new Date(); //調用format()方法,將日期轉換為字符串並輸出 System.out.println(sdf1.format(now)); System.out.println(sdf2.format(now)); System.out.println(sdf3.format(now)); //使用parse(方法將文本轉換為日期 String d = "2016-3-1 21:05:36"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //調用parse()方法,將字符串轉換為日期 Date date = sdf.parse(d); System.out.println(date); } }運行結果:
Date類最主要的作用就是獲得當前時間,同時這個類裡面也具有設置時間以及一些其他的功能,但是由於本身設
計的問題,這些方法卻遭到眾多批評,不建議使用,更推薦使用Calendar類進行時間和日期的處理。
java.util.Calendar類是一個抽象類,可以通過調用getInstance()靜態方法獲取一個Calendar對象,此對象已由當
前日期時間初始化,即默認代表當前時間,創建一個代表系統當前日期的Calendar對象,如:
Calendar c = Calendar.getInstance();//默認是當前日期
Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是采用的這種思想:
那麼如何使用Calendar獲取年、月、日、時間等信息呢?我們來看下面的代碼:
import java.util.*; public class Test{ public static void main(String[] args){ //創建Calendar對象 Calendar c = Calendar.getInstance(); //獲取年 int year = c.get(Calendar.YEAR); //獲取月份,0表示1月份 int month = c.get(Calendar.MONTH); //獲取日期 int day = c.get(Calendar.DAY_OF_MONTH); //獲取小時 int hour = c.get(Calendar.HOUR_OF_DAY); //獲取分鐘 int minute = c.get(Calendar.MINUTE); //獲取秒 int second = c.get(Calendar.SECOND); //輸出結果 System.out.println("當前時間:"+ year + "-" + (month+1) + "-" + day + " " + hour + ":" + minute + ":" + second); } }其中,調用Calendar類的getInstance()方法獲取一個實例,然後通過調用get()方法獲取日期時間信息,參數為需
要獲得的字段的值,Calendar.Year等為Calendar類中定義的靜態常量。
運行結果:
Calendar類提供了getTime()方法,用來獲取Date對象,完成Calendar和Date的轉換,還可通過getTimeInMillis()
方法,獲取此Calendar的時間值,以毫秒為單位。如下所示:
import java.util.*; public class Test{ public static void main(String[] args){ //創建Calendar對象 Calendar c = Calendar.getInstance(); //將Calendar對象轉換為Date對象 Date date = c.getTime(); //獲取當前秒數 Long time = c.getTimeInMillis(); //輸出結果 System.out.println("當前時間:"+ date); System.out.println("當前毫秒數:"+ time); } }運行結果:
實例代碼:
import java.util.*; import java.text.*; public class Test{ public static void main(String[] args){ //創建Canlendar對象 Calendar c = Calendar.getInstance(); //將Calendar對象轉換為Date對象 Date date = c.getTime(); //創建SimpleDateFormat對象,指定目標格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //將日期轉換為指定格式的字符串 String now = sdf.format(date); System.out.println("當前時間:" + now); } }運行結果: