-
LocalDate
: 该类的实例是一个不可变对象
,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息。//创建一个LocalDate对象并读取其值 LocalDate date = LocalDate.of(2014, 3, 18); //2014-03-18 int year = date.getYear(); //2014 Month month = date.getMonth(); //MARCH int day = date.getDayOfMonth(); //18 DayOfWeek dow = date.getDayOfWeek(); //TUESDAY int len = date.lengthOfMonth(); //31(days in March) boolean leap = date.isLeapYear(); //false (not a leap year) LocalDate today = LocalDate.now(); //2020-04-10 当天日期 //使用TemporalField读取LocalDate的值 int year = date.get(ChronoField.YEAR); int month = date.get(ChronoField.MONTH_OF_YEAR); int day = date.get(ChronoField.DAY_OF_MONTH); //以比较直观的方式操纵LocalDate的属性 LocalDate date1 = LocalDate.of(2014, 3, 18);//2014-03-18 LocalDate date2 = date1.withYear(2011);//2011-03-18 LocalDate date3 = date2.withDayOfMonth(25);//2011-03-25 LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);//2011-09-25 //以相对方式修改LocalDate对象的属性 LocalDate date1 = LocalDate.of(2014, 3, 18);//2014-03-18 LocalDate date2 = date1.plusWeeks(1);//2014-03-25 LocalDate date3 = date2.minusYears(3);//2011-03-25 LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS);//2011-09-25
-
LocalTime
: 一天中的时间,比如13:45:20,可以使用LocalTime类表示。//创建LocalTime并读取其值 LocalTime time = LocalTime.of(13, 45, 20);//13:45:20 int hour = time.getHour(); //13 int minute = time.getMinute();//45 int second = time.getSecond(); //20 //LocalDate和LocalTime都可以通过解析代表它们的字符串创建。使用静态方法parse,你 可以实现这一目的: LocalDate date = LocalDate.parse("2014-03-18"); LocalTime time = LocalTime.parse("13:45:20");
-
LocalDateTime
:是LocalDate和LocalTime的合体。// 2014-03-18T13:45:20 LocalDateTime dt1 = LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20); LocalDateTime dt2 = LocalDateTime.of(date, time); LocalDateTime dt3 = date.atTime(13, 45, 20); LocalDateTime dt4 = date.atTime(time); LocalDateTime dt5 = time.atDate(date); LocalDate date1 = dt1.toLocalDate(); //2014-03-18 LocalTime time1 = dt1.toLocalTime(); //13:45:20
-
Instant
:机器的日期和时间格式 以Unix元年时间开始所经历的 秒数进行计算。Instant.ofEpochSecond(3); Instant.ofEpochSecond(3, 0); Instant.ofEpochSecond(2, 1_000_000_000); //2秒之后再加上 100万纳秒(1秒) Instant.ofEpochSecond(4, -1_000_000_000); //4秒之前的100万纳秒(1秒) Instant.now().getEpochSecond() //当前时间的秒数
-
定义
Duration
或Period
//两个LocalTimes对象、两个LocalDateTimes对象,或者两个Instant对象之间的duration //由于Duration类主要用于以秒和纳 秒衡量时间的长短,你不能仅向between方法传递一个LocalDate对象做参数。 Duration d1 = Duration.between(time1, time2); Duration d1 = Duration.between(dateTime1, dateTime2); Duration d2 = Duration.between(instant1, instant2); //如果你需要以年、月或者日的方式对多个时间单位建模,可以使用Period类。 Period tenDays = Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18)); //创建Duration和Period对象 Duration threeMinutes = Duration.ofMinutes(3); Duration threeMinutes = Duration.of(3, ChronoUnit.MINUTES); Period tenDays = Period.ofDays(10); Period threeWeeks = Period.ofWeeks(3); Period twoYearsSixMonthsOneDay = Period.of(2, 6, 1);
-
使用
TemporalAdjuster
将日期调整到下个周日、下个工作日,或者是本月的最后一天。这时,你可 2 以使用重载版本的with方法,向其传递一个提供了更多定制化选择的TemporalAdjuster对象, 更加灵活地处理日期。
LocalDate date1 = LocalDate.of(2014, 3, 18); //2014-03-18 LocalDate date2 = date1.with(nextOrSame(DayOfWeek.SUNDAY)); //2014-03-23 LocalDate date3 = date2.with(lastDayOfMonth()); //2014-03-31
dayOfWeekInMonth
创建一个新的日期,它的值为同一个月中每一周的第几天firstDayOfMonth
创建一个新的日期,它的值为当月的第一天firstDayOfNextMonth
创建一个新的日期,它的值为下月的第一天firstDayOfNextYear
创建一个新的日期,它的值为明年的第一天firstDayOfYear
创建一个新的日期,它的值为当年的第一天firstInMonth
创建一个新的日期,它的值为同一个月中,第一个符合星期几要求的值lastDayOfMonth
创建一个新的日期,它的值为当月的最后一天lastDayOfNextMonth
创建一个新的日期,它的值为下月的最后一天lastDayOfNextYear
创建一个新的日期,它的值为明年的最后一天lastDayOfYear
创建一个新的日期,它的值为今年的最后一天lastInMonth
创建一个新的日期,它的值为同一个月中,最后一个符合星期几要求的值next/previous
创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星 期几要求的日期nextOrSame/previousOrSame
创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星 期几要求的日期,如果该日期已经符合要求,直接返回该对象
-
打印输出及解析日期-时间对象
LocalDate date = LocalDate.of(2014, 3, 18); String s1 = date.format(DateTimeFormatter.BASIC_ISO_DATE); //20140318 String s2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE); //2014-03-18 LocalDate date1 = LocalDate.parse("20140318", DateTimeFormatter.BASIC_ISO_DATE); LocalDate date2 = LocalDate.parse("2014-03-18", DateTimeFormatter.ISO_LOCAL_DATE); //按照某个模式创建DateTimeFormatter DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); LocalDate date1 = LocalDate.of(2014, 3, 18); String formattedDate = date1.format(formatter); LocalDate date2 = LocalDate.parse(formattedDate, formatter); //创建一个本地化的DateTimeFormatter DateTimeFormatter italianFormatter = DateTimeFormatter.ofPattern("d. MMMM yyyy", Locale.ITALIAN); LocalDate date1 = LocalDate.of(2014, 3, 18); String formattedDate = date.format(italianFormatter); // 18. marzo 2014 LocalDate date2 = LocalDate.parse(formattedDate, italianFormatter); //构造一个DateTimeFormatter 更加细致化的格式器 DateTimeFormatter italianFormatter = new DateTimeFormatterBuilder() .appendText(ChronoField.DAY_OF_MONTH) .appendLiteral(". ") .appendText(ChronoField.MONTH_OF_YEAR) .appendLiteral(" ") .appendText(ChronoField.YEAR) .parseCaseInsensitive() .toFormatter(Locale.ITALIAN);