在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);
}
}
運行結果:
