Java培训进阶之 java.time

1、本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)

LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。

LocalTime表示一个时间,而不是日期

LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

 

描述

now() / now(ZoneId zone)

静态方法,根据当前时间创建对象/指定时区的对象

of()

静态方法,根据指定日期/时间创建对象

getDayOfMonth()/getDayOfYear()

获得月份天数(1-31) /获得年份天数(1-366)

getDayOfWeek()

获得星期几(返回一个 DayOfWeek 枚举值)

getMonth()

获得月份, 返回一个 Month 枚举值

getMonthValue() / getYear()

获得月份(1-12) /获得年份

getHours()/getMinute()/getSecond()

获得当前对象对应的小时、分钟、秒

withDayOfMonth()/withDayOfYear()/withMonth()/withYear()

将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象

 with(TemporalAdjuster  t)

将当前日期时间设置为校对器指定的日期时间

plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours()

向当前对象添加几天、几周、几个月、几年、几小时

minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours()

从当前对象减去几月、几周、几天、几年、几小时

plus(TemporalAmount t)/minus(TemporalAmount t)

添加或减少一个 Duration 或 Period

isBefore()/isAfter()

比较两个 LocalDate

isLeapYear()

判断是否是闰年(在LocalDate类中声明)

 format(DateTimeFormatter  t)

格式化本地日期、时间,返回一个字符串

 parse(Charsequence text)

将指定格式的字符串解析为日期、时间

 

    //now()

    @Test

       public void testLocalDateTime(){

              LocalDate date = LocalDate.now();

              LocalTime time = LocalTime.now();

              LocalDateTime datetime = LocalDateTime.now();

    }

    //of()或parse

       @Test

       public void testLocalDate() {

              // LocalDate date = LocalDate.now();

              // LocalDate date = LocalDate.of(2017, 3, 20);

              LocalDate date = LocalDate.parse(“2017-03-12”);

       }

       public static void main(String[] args) {

              LocalDateTime t = LocalDateTime.now();

              System.out.println(“这一天是这一年的第几天:”+t.getDayOfYear());

              System.out.println(“年:”+t.getYear());

              System.out.println(“月:”+t.getMonth());

              System.out.println(“月份值:”+t.getMonthValue());

              System.out.println(“日:”+t.getDayOfMonth());

              System.out.println(“星期:”+t.getDayOfWeek());

              System.out.println(“时:”+t.getHour());

              System.out.println(“分:”+t.getMinute());

              System.out.println(“秒:”+t.getSecond());

              System.out.println(t.getMonthValue());

       }

       @Test

       public void testLocalDate2() {

              LocalDate date = LocalDate.now();

 

        //withXxx()方法,不改变原来的date对象,返回一个新的对象,不可变性

              // LocalDate date2 = date.withDayOfMonth(1);//获取这个月的第一天

              LocalDate date2 = date.with(TemporalAdjusters.firstDayOfMonth());// 获取这个月的第一天

              System.out.println(date2);

 

              // 获取这个月的最后一天

              LocalDate date3 = date.with(TemporalAdjusters.lastDayOfMonth());

              System.out.println(date3);

 

              //45天后的日期

              LocalDate date4 = date.plusDays(45);

              System.out.println(date4);

 

              //20天前的日期

              LocalDate date5 = date.minusDays(20);

              System.out.println(date5);

 

              boolean before = date.isBefore(date5);

              System.out.println(date+”是否比”+date5+”早” + before);

 

              System.out.println(date+”是否是闰年:”+date.isLeapYear());

 

       }

              MonthDay month = MonthDay.of(8, 14);

              MonthDay today = MonthDay.from(date);

              System.out.println(“今天是否是生日:” + month.equals(today));

2、瞬时:Instant

Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。

在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。

java.time包通过值类型Instant提供机器视图。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。

Java培训课程

java培训课程

时间戳:指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

       public static void main(String[] args) {

              Instant t = Instant.now();

              System.out.println(t);

 

              //偏移8个小时

              OffsetDateTime atOffset = t.atOffset(ZoneOffset.ofHours(8));

              System.out.println(atOffset);

 

              long milli = t.toEpochMilli();

              System.out.println(milli);

 

              Instant in2 = Instant.ofEpochSecond(10000000);

              System.out.println(in2);

       }

3、带时区的日期、时间的处理

作为一个开发者,如果不用去处理时区和它带来的复杂性,那是幸运的。java.time包下的LocalDate、LocalTime、LocalDateTime和Instant基本能满足需求。当你不可避免时区时,ZonedDateTime等类可以满足我们的需求。

 

ZonedDateTime:一个在ISO-8601日历系统时区的日期时间,如 2007-12-03T10:15:30+01:00 Europe/Paris。

  • 其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式,例如:Asia/Shanghai等
  • now():使用系统时间获取当前的ZonedDateTime
  • now(ZoneId):返回指定时区的ZonedDateTime

 

ZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/Paris

  • getAvailableZoneIds():静态方法,可以获取所有时区信息
  • of(String id):静态方法,用指定的时区信息获取ZoneId对象

 

Clock:使用时区提供对当前即时、日期和时间的访问的时钟。

 

       public static void main(String[] args) {

              Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();

              for (String string : availableZoneIds) {

                     System.out.println(string);

              }

 

              ZonedDateTime t = ZonedDateTime.now();

              System.out.println(t);

 

              ZonedDateTime t1 = ZonedDateTime.now(ZoneId.of(“America/New_York”));

              System.out.println(t1);

 

//            Clock clock = Clock.systemDefaultZone();

              Clock c = Clock.system(ZoneId.of(“America/New_York”));

              System.out.println(c.getZone());

              System.out.println(c.instant());

       }

4、持续时间:Duration

Duration:用于计算两个“时间”间隔

       public static void main(String[] args) {

              LocalDateTime t1 = LocalDateTime.now();

              LocalDateTime t2 = LocalDateTime.of(2017, 8, 29, 0, 0, 0, 0);

              Duration between = Duration.between(t1, t2);

              System.out.println(between);

 

              System.out.println(“相差的总天数:”+between.toDays());

              System.out.println(“相差的总小时数:”+between.toHours());

              System.out.println(“相差的总分钟数:”+between.toMinutes());

              System.out.println(“相差的总秒数:”+between.getSeconds());

              System.out.println(“相差的总毫秒数:”+between.toMillis());

              System.out.println(“相差的总纳秒数:”+between.toNanos());

              System.out.println(“不够一秒的纳秒数:”+between.getNano());

       }

5、日期间隔:Period

Period:用于计算两个“日期”间隔

       public static void main(String[] args) {

              LocalDate t1 = LocalDate.now();

              LocalDate t2 = LocalDate.of(2018, 12, 31);

              Period between = Period.between(t1, t2);

              System.out.println(between);

 

              System.out.println(“相差的年数:”+between.getYears());//1年

              System.out.println(“相差的月数:”+between.getMonths());//又7个月

              System.out.println(“相差的天数:”+between.getDays());//零25天

              System.out.println(“相差的总数:”+between.toTotalMonths());//总共19个月

       }


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)