時間日期相關:Date類、DateFormat類、Calendar類
1 Date類
類 Date 表示特定的瞬間,精確到毫秒。
1秒=1000毫秒
毫秒的0點:公元1970年 一月一日,午夜0:00:00 對應的毫秒值就是0
時間和日期的計算,必須依賴毫秒值。
System.currentTimeMillis() 返回以毫秒為單位的當前時間。返回值是long型別。
例:
public class Test { public static void main(String[] args) { long times=System.currentTimeMillis(); System.out.println(times); } }
1.1 Date類構造方法
1.1.1 Date()
注意導util下的Date包
例:
import java.util.Date; public class Test { public static void main(String[] args) { //建立當前日期物件 Date date1=new Date(); System.out.println(date1); //建立指定毫秒值的日期物件 Date longdate=new Date(20000000000000L); System.out.println(longdate); } }
1.2常用方法
getTime(),把日期物件轉換成對應的時間毫秒值
例:
import java.util.Date; public class Test { public static void main(String[] args) { Date date1=new Date(); System.out.println(date1.getTime()); Date longdate=new Date(20000000000000L); System.out.println(longdate.getTime()); } }
1.3 Date中還有getYear、getMouth等方法,但是已經過時,會有其他類的方法取代。
1.4 toString方法
上面列印date物件就是預設呼叫了toString方法。
2 DateFormat類
DateFormat 是日期/時間格式化子類的抽象類,
通過這個類可以完成日期和文字之間的轉換。
也就是日期物件(new date())和字串的互相轉換。
2.1建立物件
DateFormat是抽象類,需要使用其子類SimpleDateFormat來建立物件。
引數是傳一個指定格式,
指定格式的具體規則:
在一個字串中,會將以下字母替換成對應時間組成部分,剩餘內容原樣輸出:
年月日時分秒:
yyyy-MM-dd HH:mm:ss 注意要寫yyyy(四個y),寫成yy就是兩位數的年份。
2.2常用方法
format方法,將Date物件轉換成String
parse方法,將String轉換成Date(轉換時,該String要符合指定格式,否則不能轉換)
例:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Time02 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //日期物件轉成字串 Date date=new Date(); String datestr=sdf.format(date); System.out.println(datestr); //字串轉成日期物件 String str="1999-05-05 12:05:06"; Date d=sdf.parse(str); System.out.println(d); } }
這裡注意要拋異常,因為有可能傳一個錯誤的格式,
3 Calendar類(不常用)
Calendar是日曆類,替換掉了許多Date的方法。
該類將所有可能用到的時間資訊封裝為靜態成員變數,方便獲取。
Calendar為抽象類,不能直接建立物件,而是通過靜態方法建立,將語言敏感內容處理好,再返回子類物件。
3.1 Calendar類靜態方法
3.2常用方法
例:
import java.util.Calendar; import java.util.Date; public class Demo1 { public static void main(String[] args) { //建立Calendar物件 Calendar c=Calendar.getInstance(); //當前日期 //System.out.println(c); //時間偏移 System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.YEAR, 1); System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.YEAR, -2); System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.DATE, 2); System.out.println(c.get(Calendar.DATE)); //日曆類轉為日期類 Date d=c.getTime(); System.out.println(d); //將日曆類設定成指定的時間 Calendar c2=Calendar.getInstance(); c2.set(Calendar.YEAR, 2008); c2.set(Calendar.MONTH,7); //這是8月 c2.set(Calendar.DATE,8); c2.set(2055, 7, 8, 8, 8, 8); System.out.println(c2.getTime()); } }
注意:
1)用fammat轉換,必須先轉成日期類
2)西方星期的開始為週日,中國為週一。
3)在Calendar類中,月份的表示是以0-11代表1-12月。
所以月要加1,星期要減1
4)日期是有大小關係的,時間靠後,時間越大。
4 練習
1)求出自己已經出生多少天
import java.util.Calendar; public class Days { public static void main(String[] args) { //當前系統時間毫秒 long currenttime = System.currentTimeMillis(); //設定出生日期 Calendar c = Calendar.getInstance(); c.set(1987, 1, 5); long birth = c.getTime().getTime(); //先轉成日期類,再轉成毫秒 //計算時間差 int day = (int) ((currenttime - birth) / 1000 / 60 / 60 / 24); System.out.println("已出生" + day + "天"); } }
2)求出今天距離2046年1月1日還有多少天
import java.util.Calendar; public class Days2 { public static void main(String[] args) { // 當前系統時間毫秒 long currenttime = System.currentTimeMillis(); // 設定日期 Calendar c = Calendar.getInstance(); c.set(2046, 1, 1); long future = c.getTime().getTime(); // 先轉成日期類,再轉成毫秒 // 計算時間差 int day = (int) ((future-currenttime) / 1000 / 60 / 60 / 24); System.out.println("還有" + day + "天到2046年"); } }