日期時間類總結工具
1、 Date類orm
Date類對象的建立:對象
1、建立一個當前時間的Date對象blog
//建立一個表明系統當前日期的Date對象字符串
Date d = new Date();get
2、建立一個咱們指定的時間的Date對象:it
使用帶參數的構造方法Date(int year, int month, int day) ,能夠構造指定日期的Date類對象,Date類中年份的參數應該是實際須要表明的年份減去1900,實際須要表明的月份減去1之後的值。io
//建立一個表明2014年6月12號的Date對象form
Date d1 = new Date(2014-1900, 6-1, 12); (注意參數的設置)class
3、正確得到一個date對象所包含的信息
如:
Date d2 = new Date(2014-1900, 6-1, 12);
//得到年份 (注意年份要加上1900,這樣纔是日期對象d2所表明的年份)
int year = d2.getYear() + 1900;
//得到月份 (注意月份要加1,這樣纔是日期對象d2所表明的月份)
int month = d2.getMonth() + 1;
//得到日期
int date = d2.getDate();
//得到小時
int hour = d2.getHours();//不設置默認爲0
//得到分鐘
int minute = d2.getMinutes();
//得到秒
int second = d2.getSeconds();
//得到星期 (注意:0表明星期日、1表明星期一、2表明星期2,其餘的一次類推了)
int day = d2.getDay();
2、Calendar類
Calendar類的功能要比Date類強大不少,能夠方便的進行日期的計算,獲取日期中的信息時考慮了時區等問題。並且在實現方式上也比Date類要複雜一些
1、Calendar類對象的建立
Calendar類是一個抽象類,因爲Calendar類是抽象類,且Calendar類的構造方法是protected的,因此沒法使用Calendar類的構造方法來建立對象,API中提供了getInstance方法用來建立對象。
2、建立一個表明系統當前日期的Calendar對象
Calendar c = Calendar.getInstance();//默認是當前日期
3、建立一個指定日期的Calendar對象
使用Calendar類表明特定的時間,須要首先建立一個Calendar的對象,而後再設定該對象中的年月日參數來完成。
//建立一個表明2014年5月9日的Calendar對象
Calendar c1 = Calendar.getInstance();
c1.set(2014, 5 - 1, 9);//調用:public final void set(int year,int month,int date)
4、Calendar類對象信息的設置與得到
1)Calendar類對象信息的設置
A、Set設置
如:Calendar c1 = Calendar.getInstance();
調用:public final void set(int year,int month,int date)
c1.set(2014, 6- 1, 9);//把Calendar對象c1的年月日分別設這爲:201四、六、9
B、利用字段類型設置
若是隻設定某個字段,例如日期的值,則可使用public void set(int field,int value)
//把 c1對象表明的日期設置爲10號,其它全部的數值會被從新計算
c1.set(Calendar.DATE,10);
//把c1對象表明的年份設置爲2014年,其餘的全部數值會被從新計算
c1.set(Calendar.YEAR,2015);
其餘字段屬性set的意義以此類推
Calendar類中用一下這些常量表示不一樣的意義,jdk內的不少類其實都是採用的這種思想
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段意義相同
Calendar.HOUR——12小時制的小時
Calendar.HOUR_OF_DAY——24小時制的小時
Calendar.MINUTE——分鐘
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期幾
C、Add設置(可用與計算時間)
Calendar c1 = Calendar.getInstance();
//把c1對象的日期加上10,也就是c1所表的日期的10天后的日期,其它全部的數值會被從新計算
c1.add(Calendar.DATE, 10);
//把c1對象的日期加上-10,也就是c1所表的日期的10天前的日期,其它全部的數值會被從新計算
c1.add(Calendar.DATE, -10);
其餘字段屬性的add的意義以此類推
2)、Calendar類對象信息的得到(使用get())
Calendar c1 = Calendar.getInstance();
// 得到年份
int year = c1.get(Calendar.YEAR);
// 得到月份
int month = c1.get(Calendar.MONTH) + 1;(MONTH+1)
// 得到日期
int date = c1.get(Calendar.DATE);
// 得到小時
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 得到分鐘
int minute = c1.get(Calendar.MINUTE);
// 得到秒
int second = c1.get(Calendar.SECOND);
// 得到星期幾(注意(這個與Date類是不一樣的):1表明星期日、2表明星期一、3表明星期二,以此類推)
int day = c1.get(Calendar.DAY_OF_WEEK);
3、 GregorianCalendar類
GregorianCalendar 是 Calendar 的一個具體子類,提供了世界上大多數國家使用的標準日曆系統。
1、GregorianCalendar類對象的建立
GregorianCalendar有本身的構造方法,而其父類Calendar沒有公開的構造方法。
GregorianCalendar() 在具備默認語言環境的默認時區內使用當前時間構造一個默認的 GregorianCalendar。
在具備默認語言環境的默認時區內構造一個帶有給定日期設置的 GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
2、建立一個表明當前日期的GregorianCalendar對象
GregorianCalendar gc = new GregorianCalendar();
//建立一個表明2014年6月19日的GregorianCalendar對象(注意參數設置,與其父類是同樣,月份要減去1)
GregorianCalendar gc = new GregorianCalendar(2014,6-1,19);
3、另外:GregorianCalendar有一個方法:boolean isLeapYear(int year) 肯定給定的年份是否爲閏年
4、DateFormat類和SimpleDateFormat類
public class SimpleDateFormat extends DateFormat 是一個以與語言環境相關的方式來格式化和分析日期的具體類。(日期時間輸出的工具類)
它容許進行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。因此SimpleDateFormat類能夠實現:String 到 Date,Date到String的互轉
5、日期類對象之間的互轉
/* Date Long Calendar*/
Date類對象與long型時間的互轉
//1.將Date類的對象轉換爲long型時間
Date d= new Date();
//使用對象的getTime()方法完成
long dLong = d.getTime();
//2.將long型時間轉換爲Date類的對象
long time = 1290876532190L;
//使用Date的構造方法完成
Date d2 = new Date(time);
Calendar對象和long型時間之間的互轉
// 將Calendar對象轉換爲相對時間
Calendar c = Calendar.getInstance();
long t1 = c.getTimeInMillis();
// 將long轉換爲Calendar對象
Calendar c1 = Calendar.getInstance();
long t = 1252785271098L;
c1.setTimeInMillis(t1);
/* String Date Calendar 三者之間的相互轉換*/
Calendar對象和Date對象之間的互轉
//1 .將Calendar對象轉換爲Date(c.getTime())
Calendar c = Calendar.getInstance();
Date d = c.getTime();
// 2.將Date轉換爲Calendar對象(s.setTime(date))
Calendar c1 = Calendar.getInstance();
Date d1 = new Date();
//經過setTime()方法後,日曆c1所表示的日期就d1的日期
c1.setTime(d1);
String Calendar之間的轉換:
//1.Date 轉化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
//2.String 轉化Date
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date birthday = sdf.parse(str);
Date個Calendar對象之間的轉換
//1.Date 轉化爲Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
//2.Calenda轉換爲Date
Calendar calendar = Calendar.getInstance();
Date date =calendar.getTime();
Date和String對象之間的轉換
//1.Calendar 轉化 String
Calendar calendat = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;
String dateStr = sdf.format(calendar.getTime());
//2.String 轉化Calendar
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
6、利用以上各個類的功能,咱們能夠很簡單的實現一些時間計算的功能,下面看幾個方法:
l、判斷是不是閏年
/**
* 給定一個年份判斷該年份是否爲閏年
*/
public static boolean isLeapYear(int year) {
GregorianCalendar calendar = new GregorianCalendar();
return calendar.isLeapYear(year);
}
二、獲取當前日期的字符串表示形式
/**
* 利用SimpleDateFormat獲取當前日期的字符串表示形式 格式:2009-5-05
*/
public static String getCurrentDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(System.currentTimeMillis());
}
三、給出任意一個年月日獲得該天是星期幾
/**
* 給出任意一個年月日獲得該天是星期幾
*/
public static int getWeek(String date) {
// 注意參數的大小寫格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
try {
Date d = dateFormat.parse(date);
c.setTime(d);
} catch (ParseException e) {
}
return c.get(Calendar.DAY_OF_WEEK)-1;
}
四、 得到今天n天之後或者n天之前是那一天
/**
* 得到距離今天n天的那一天的日期
*/
public static String getDistanceDay(int day) {
Calendar calen = Calendar.getInstance();
calen.add(Calendar.DAY_OF_MONTH, day);
Date date = calen.getTime();
// 這裏也個用SimpleDateFormat的format()進行格式化,而後以字符串形式返回格式化後的date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(date);
}
五、 得到距離指定日期n天的那一天的日期
/**
* 得到距離指定日期n天的那一天的日期
*/
public static String getDistanceDay(String date, int day) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date d;
Calendar c =Calendar.getInstance();
try {
d = dateFormat.parse(date);
c.setTime(d);
c.add(Calendar.DATE, day);
} catch (ParseException e) {
e.printStackTrace();
}
return dateFormat.format(c.getTime());
}
六、得到給定兩個日期相差的天數
/**
* 得到給定兩個日期相差的天數
*
*/
public static long getGapDays(String date1, String date2) {
String[] d1 = date1.split("-");
String[] d2 = date2.split("-");
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer
.parseInt(d1[2]), 0, 0, 0);
long l1 = c.getTimeInMillis();
c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer
.parseInt(d2[2]), 0, 0, 0);
long l2 = c.getTimeInMillis();
return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));
}