java8的日期、时间类

时间:2021-05-01 22:06:39

一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 }

 

java8的日期、时间类

 

 四.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 }

 

java8的日期、时间类

五.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 }

 

java8的日期、时间类

 

 容错机制关闭时

 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的日期、时间类

六.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 }

 

 java8的日期、时间类