Calendar、Date、LocalDate/LocalTime(3)

      java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。

    3.1 LocalDate/LocalTime 的构造方法

      3.1.1 LocalDate 的构造方法:

        LocalDate 并没有提供公开的构造方法,只提供了一个封装的构造方法供内部使用。

private LocalDate(int year, int month, int dayOfMonth) { this.year = year; this.month = (short) month; this.day = (short) dayOfMonth; }

      LocalDate 提供了三种创建实例的方法:

//获取当前时间的LocalDate LocalDate localDate = LocalDate.now(); //获取指定年、月、日 的 LocalDate LocalDate ofDate = LocalDate.of(2016,12,31); //通过解析字符串获取 LocalDate,如果格式不对会抛出 DateTimeParseException LocalDate parseDate = LocalDate.parse("2016-12-31-");

      

      3.1.2 LocalTime 的构造方法:

        LocalTime 与LcoalDate 一样,提供了一个封装的构造方法:

private LocalTime(int hour, int minute, int second, int nanoOfSecond) { this.hour = (byte) hour; this.minute = (byte) minute; this.second = (byte) second; this.nano = nanoOfSecond; }

        LocalTime 提供了三种创建方法:

LocalTime localTime = LocalTime.now().withNano(0); LocalTime ofTime = LocalTime.of(16,30,25); LocalTime parseTime = LocalTime.parse("12:00:01");

    3.2 LocalDate/LocalTime 的常用方法

      获取当天的起始时间:atStartOfDay()

LocalDate localDate = LocalDate.now(); LocalDateTime date = localDate.atStartOfDay(); 输出: 2016-12-14T00:00

      设置当前日期的时间:atTime()

LocalDate localDate = LocalDate.now(); LocalDateTime date = localDate.atTime(16,25,30); 输出: 2016-12-14T16:25:30

      

      格式转换:format()

      常用的获取年、月、日 等方法

int year = localDate.getYear(); int month = localDate.getMonthValue(); int day = localDate.getDayOfMonth();

      获取改变月份的LocalDate :withMonth()

LocalDate localDate = LocalDate.now(); LocalDate d = localDate.withMonth(10);

      其他常用的日期转换:

// 取本月第1天: LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2014-12-01 // 取本月第2天: LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2014-12-02 // 取本月最后一天,再也不用计算是28,29,30还是31: LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2014-12-31 // 取下一天: LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 变成了2015-01-01 // 取2015年1月第一个周一,这个计算用Calendar要死掉很多脑细胞: LocalDate firstMondayOf2015 = LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05

      3.3 LocalDate/LocalTime 的总结

      在新的Java 8中,日期和时间被明确划分为LocalDate和LocalTime,LocalDate无法包含时间,LocalTime无法包含日期。当然,LocalDateTime才能同时包含日期和时间。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b0bae27e1d19e44918b5b9b6a5fa062e.html