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 }

 

 

 

posted @ 2018-12-10 16:45  静心*尽力  阅读(1956)  评论(0编辑  收藏  举报