java8的日期、時間類
阿新 • • 發佈:2018-12-10
一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 importjava.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 }