1. 程式人生 > >java8的日期、時間類

java8的日期、時間類

一Date類(歷史悠久) 月份與小時從0開始,天數從1開始,年從1900開始

 

二.Calendar類

   ①抽象類

   ②不能直接例項化

 

三.使用

   

 1 import java.util.Date;
 2 
 3 public class Demo_Date 
 4 {
 5   public static void main(String[] args) 
 6   {
 7     //獲取當前時間
 8       Date d=new Date();
 9       //
獲取當前時間一百秒後的時間 10 Date d2=new Date(System.currentTimeMillis()+100); 11 //比較時間d是否在d2之前 12 System.out.println(d.before(d2)); 13 //比較時間先後順序,若在此之前則返回-1,若相等則返回0,否則返回1 14 System.out.println(d.compareTo(d2)); 15 } 16 }

 

 

 四.set方法的延遲性

 

 1 import
java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 /** 5 * set()方法的延遲性 6 * 當使用set修改月份的時候,欄位確實改變 7 * 但是隻有使用get()、gettime()、getTimeMillis()、add()、roll()才會重新計算日曆時間 8 */ 9 public class AddTest{ 10 public static void main(String[] args) { 11 //
例項化一個calendar類 12 Calendar cal=Calendar.getInstance(); 13 //設定時間 14 cal.set(2018, 11, 8, 14, 30,30);//延遲計算 15 //修改時間 16 cal.add(Calendar.MONTH, 6); 17 //計算時間並且接收 18 Date day=cal.getTime(); 19 //建立轉換器 20 SimpleDateFormat sim=new SimpleDateFormat("y年M月d日 h:m:s"); 21 //轉換為字串格式 22 String result=sim.format(day); 23 //獲取時間 24 System.out.println(result); 25 } 26 }

 

五.Calendar的容錯性

       容錯機制開啟時

 1 import java.text.SimpleDateFormat;
 2 import java.util.Calendar;
 3 import java.util.Date;
 4 
 5 /*
 6  * Calendar的容錯性:setLenient()方法
 7  *   1.當容錯性沒有關閉時,將月份設定為13時(月份是從0開始,代表一月)顯示為二月
 8  *   並且會將YEAR欄位加一(本例項當前時間是2018年)
 9  *   2.當容錯性關閉時,導致執行時異常
10  */
11 public class LenientTest {
12     public static void main(String[] args) {
13         //例項化calendar物件
14         Calendar ca=Calendar.getInstance();
15         
16             //ca.setLenient(false);//關閉容錯性
17          
18         //隨便設定一個時間
19         ca.set(Calendar.MONTH, 13);
20         //計算時間
21         Date day=ca.getTime();
22          //建立轉換器
23         SimpleDateFormat sim=new SimpleDateFormat("y年M月d日  h:m:s");
24         //轉換為字串格式
25         String result=sim.format(day);
26         System.out.println(result);               
27     }
28 }

 

 

 容錯機制關閉時

 1 /*
 2  * Calendar的容錯性:setLenient()方法
 3  *   1.當容錯性沒有關閉時,將月份設定為13時(月份是從0開始,代表一月)顯示為二月
 4  *   並且會將YEAR欄位加一(本例項當前時間是2018年)
 5  *   2.當容錯性關閉時,導致執行時異常
 6  */
 7 public class LenientTest {
 8     public static void main(String[] args) {
 9         //例項化calendar物件
10         Calendar ca=Calendar.getInstance();
11         
12             ca.setLenient(false);//關閉容錯性
13          
14         //隨便設定一個時間
15         ca.set(Calendar.MONTH, 13);
16         //計算時間
17         Date day=ca.getTime();
18          //建立轉換器
19         SimpleDateFormat sim=new SimpleDateFormat("y年M月d日  h:m:s");
20         //轉換為字串格式
21         String result=sim.format(day);
22         System.out.println(result);               
23     }
24 }

六.java8新增的日期、時間包的使用(請自行查閱API文件)

 1 import java.time.Clock;
 2 import java.time.Duration;
 3 import java.time.Instant;
 4 import java.time.LocalDate;
 5 import java.time.LocalDateTime;
 6 import java.time.LocalTime;
 7 import java.time.Month;
 8 import java.time.MonthDay;
 9 import java.time.Year;
10 import java.time.YearMonth;
11 /**
12  * systemUTC()方法返回當前時間使用UTC時區轉換為日期和時間
13  */
14 public class TimeClockTest {
15     public static void main(String[] args) {
16         //----下面是關於clock的用法----
17         //獲取當前clock
18         Clock clock=Clock.systemUTC();
19         //通過Clock獲取當前時刻
20         System.out.println("當前時刻為: "+clock.instant());
21         //獲取clock對應的毫秒數,與system.currentTimeMillis()輸出相同
22         System.out.println(clock.millis());
23         System.out.println(System.currentTimeMillis());
24         //----下面是關於Duration的用法------
25         Duration dur=Duration.ofSeconds(6000);
26         System.out.println("6000秒相當於: "+dur.toMinutes()+"分");
27         System.out.println("6000秒相當於: "+dur.toMinutes()+"小時");
28         System.out.println("6000秒相當於: "+dur.toDays()+"天");
29         //在clock基礎上增加6000秒,返回新的clock
30         Clock clock2=Clock.offset(clock, dur);
31         //可以看到clock2與clock相差1小時40分
32         System.out.println("當前時刻加6000秒為: "+clock2.instant());
33         //下面是instant的用法
34         //獲取當前時間
35         Instant instant=Instant.now();
36         System.out.println(instant);
37         //instant新增6000秒,返回新的Instant
38         Instant instant2=instant.plusSeconds(6000);
39         System.out.println(instant2);
40         //根據字串解析Instant物件
41         Instant instant3=instant.parse("2018-12-08T11:57:43.054Z");
42         System.out.println(instant3);
43         //在instant3的基礎上新增5小時4分鐘
44         Instant instant4=instant3.plus(Duration.ofHours(5).plusMinutes(4));
45         System.out.println(instant4);
46         //獲取instant4五天前的時刻
47         Instant instant5=instant4.minus(Duration.ofDays(5));
48         System.out.println(instant5);
49         //-----下面是關於LocalDate的用法-----
50         LocalDate localdate=LocalDate.now();
51         System.out.println(localdate);
52         //獲得2018年的第345天
53         localdate=LocalDate.ofYearDay(2018, 345);
54         System.out.println(localdate);
55         //設定為2018年12月31日
56         localdate=LocalDate.of(2018, Month.DECEMBER, 31);
57         System.out.println(localdate);
58         //---下面是關於LocalTime---的用法
59         //獲取當前時間
60         LocalTime localtime=LocalTime.now();
61         System.out.println(localtime);
62         //設定為22點33分
63         localtime=LocalTime.of(22, 33);
64         System.out.println(localtime);
65         //返回一天中的第5503秒
66         localtime=LocalTime.ofSecondOfDay(5503);
67         System.out.println(localtime);
68         //---下面是關於localDateTime的用法
69         //獲取當前時間
70         LocalDateTime localdatetime=LocalDateTime.now();
71         System.out.println(localdatetime);
72         //當前日期,時間加上25小時3分鐘
73         LocalDateTime future=localdatetime.plusHours(25).plusMinutes(3);
74         System.out.println(future);
75         //---下面是關於year,yearMonth,MonthDay的用法示例---
76         Year year=Year.now();//獲取當前的年份
77         System.out.println("當前年份: "+year);//輸出當前年份
78          year=year.plusYears(5); //當前年份再加5
79          System.out.println("當前年份再過5年: "+year);
80          //根據指定月份獲取yearsMonth
81          YearMonth ym=year.atMonth(10);
82          System.out.println("year年10月: "+ym);
83          //當前年月再加5年.減三個月
84          ym=ym.plusYears(5).minusMonths(3);
85          System.out.println("year年10月再加5年,減3個月: "+ym);
86          MonthDay md=MonthDay.now();
87          System.out.println("當前月日: "+md);
88          //設定為5月23日
89          MonthDay md2=md.with(Month.MAY).withDayOfMonth(23);
90          System.out.println("5月23日為: "+md2);
91     }
92 }