创建
now:获取当前
of:指定年月日或时分秒
atTime:给LocalDate指定时分秒成为LocalDateTime
atDate:获取LocalDateTime中的LocalDate
LocalDate localDate = LocalDate.now(); // 2018-11-22
LocalTime localTime = LocalTime.of(2, 20, 30); // 02:20:30
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); // 2018-11-22T02:20:30
LocalDateTime localDateTime1 = localDate.atStartOfDay(); // 2018-11-22T00:00
LocalDateTime localDateTime2 = localDate.atTime(20, 12, 59); // 2018-11-22T20:12:59
LocalDateTime localDateTime3 = localTime.atDate(localDate); // 2018-11-22T02:20:30
LocalDateTime dateTime = LocalDateTime.parse("2020-10-10 02:30:05",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(dateTime); // 2020-10-10T02:30:05
System.out.println(dateTime.toLocalDate()); // 2020-10-10
System.out.println(dateTime.toLocalTime()); // 02:30:05
获取
通过getXXX来获取日期中的那年月日时分秒,以及当月天数,是否闰年等
LocalDateTime date = LocalDateTime.now(); // 2018-11-22T18:27:46.349
int year = date.getYear(); // 2018
int monthValue = date.getMonthValue(); // 11
Month month = date.getMonth(); // NOVEMBER
int dayOfMonth = date.getDayOfMonth(); // 22
int hour = date.getHour(); // 18
int minute = date.getMinute(); // 27
int second = date.getSecond(); // 46
int nano = date.getNano(); // 349000000
int dayOfYear = date.getDayOfYear(); // 326
DayOfWeek dayOfWeek = date.getDayOfWeek(); // THURSDAY
LocalDate localDate = date.toLocalDate(); // 2018-11-22
int lengthOfYear = localDate.lengthOfYear();// 365
int lengthOfMonth = localDate.lengthOfMonth();// 30
boolean leapYear = localDate.isLeapYear(); // false
int i = localDate.get(ChronoField.DAY_OF_MONTH); // 22
int i1 = date.get(ChronoField.HOUR_OF_DAY); // 18
修改
通过withXXX直观的修改日期,也可以通过plus做增量、minus做减量
通过修改with方法中参数TemporalAdjusters的值获取本月第一天,下月最后一天,第几个周几等的日期
// 8012-11-15T22:40
LocalDateTime time = LocalDateTime.of(8012, Month.NOVEMBER, 15, 22, 40);
LocalDateTime time1 = time.withYear(2018)
.withMonth(Month.OCTOBER.getValue())
.withDayOfMonth(1)
.withHour(5)
.withMinute(0)
.withSecond(5); // 2018-10-01T05:00:05
LocalDateTime time2 = time1.plusYears(10)
.minusMonths(1)
.plusDays(1)
.minusHours(1)
.plusMinutes(1)
.minusSeconds(1); // 2028-09-02T04:01:04
LocalDate localDate = LocalDate.of(2018, 11, 2); // 2018-11-02
LocalDate date = localDate.with(TemporalAdjusters.firstDayOfMonth()); // 2018-11-01 本月第一天
LocalDate date1 = localDate.with(TemporalAdjusters.firstDayOfNextMonth()); // 2018-12-01 下月第一天
LocalDate date2 = localDate.with(TemporalAdjusters.firstDayOfNextYear()); // 2019-01-01 下年第一天
LocalDate date3 = localDate.with(TemporalAdjusters.lastDayOfMonth()); // 2018-11-30 本月最后天
LocalDate date4 = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY)); // 2018-11-25 当月最后周日
LocalDate date5 = localDate.with(TemporalAdjusters.dayOfWeekInMonth(1,DayOfWeek.SATURDAY)); // 2018-11-03 当月第一周六
LocalDate date6 = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); // 2018-11-04 下个周日
格式化输出
DateTimeFormatter用来格式化日期,也可以自定义格式
LocalDateTime time = LocalDateTime.of(2018, 12, 1, 10, 20, 30);
String s1 = time.format(DateTimeFormatter.ISO_DATE_TIME); // 2018-12-01T10:20:30
String s2 = time.format(DateTimeFormatter.BASIC_ISO_DATE); // 20181201
String s3 = time.format(DateTimeFormatter.ofPattern("yyyy MM dd -- HH:mm:ssS"));// 2018 12 01 -- 10:20:300
DateTimeFormatter myFormatter = new DateTimeFormatterBuilder()
.appendText(ChronoField.YEAR)
.appendLiteral("年")
.appendText(ChronoField.MONTH_OF_YEAR)
.appendText(ChronoField.DAY_OF_MONTH)
.appendLiteral("日 第")
.appendText(ChronoField.DAY_OF_YEAR)
.appendLiteral("天|")
.appendText(ChronoField.DAY_OF_WEEK)
.appendLiteral(" ")
.parseCaseInsensitive()
.toFormatter(Locale.CHINA);
String s4 = time.format(myFormatter); // 2018年十二月1日 第335天|星期六
时区
通过atZone来获取带有指定时区的日期,也可以通过ZoneOffset 表示所在时区偏移量
LocalDateTime time = LocalDateTime.now();
ZonedDateTime shanghai = time.atZone(ZoneId.of("Asia/Shanghai"));
ZonedDateTime Anchorage = time.atZone(ZoneId.of("America/Anchorage"));
System.out.println(shanghai); // 2018-11-22T20:36:47.733+08:00[Asia/Shanghai]
System.out.println(Anchorage); // 2018-11-22T20:36:47.733-09:00[America/Anchorage]
ZoneOffset offset = ZoneOffset.of("-01:00");
OffsetDateTime offsetDateTime = OffsetDateTime.of(time, offset);
System.out.println(offsetDateTime); // 2018-11-22T20:36:47.733-01:00
LocalDateTime = LocalDate + LocalTime
ZonedDateTime = LocalDateTime + ZoneId