package com.ityj.jdk8Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTimeTest {
public static void main(String[] args) {
System.out.println("******************************11111********************************");
// 1、获取当前时间 LocalDateTime、LocalDate、LocalTime三种格式
LocalDateTime now = LocalDateTime.now();
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
// 其中LocalDate、LocalTime也可以通过LocalDateTime获取
LocalDate localDate1 = now.toLocalDate();
LocalTime localTime1 = now.toLocalTime();
// 当前的时间戳获取
System.out.println("System.currentTimeMillis() = "+System.currentTimeMillis());
System.out.println("Instant.now().toEpochMilli()毫秒值 = "+ Instant.now().toEpochMilli());
System.out.println("Instant.now().toEpochMilli()秒为单位 = "+Instant.now().getEpochSecond());
// 注意默认获取出来的是当前的美国时间和我们相差八个小时
System.out.println("Instant.now().toString()默认伦敦时间 = "+Instant.now().toString());
System.out.println("Instant.now().toString()偏移8小时北京时间 = "+Instant.now().atOffset(ZoneOffset.ofHours(8)));
System.out.println("Instant.now().toString()偏移-4小时美国时间 = "+Instant.now().atOffset(ZoneOffset.ofHours(-4)));
// Duration.between(start, end)获取时间戳间隔
//Duration 获取两个Instant时间戳的间隔
Instant start = Instant.now();
long sum = 0L;
for (int i = 0; i < 1000000; i++) {
sum += i;
}
Instant end = Instant.now();
Duration between = Duration.between(start, end);
System.out.println("Duration.between(start, end) = "+ between.toMillis());
//Period: Period.between(begin, enddd)
//用于计算两个“日期”间隔的类
LocalDate begin = LocalDate.of(1995, 5, 5);
LocalDate enddd = LocalDate.now();
//##Period:
//用于计算两个“日期”间隔的类
Period period = Period.between(begin, enddd);
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();
// 获取相差的天数间隔
long daysBetween = ChronoUnit.DAYS.between(enddd, enddd);
System.out.println("******************************22222********************************");
// 2、自定义指定时间
LocalDateTime of = LocalDateTime.of(2010, 10, 10, 17, 20, 30, 100);
LocalDate of1 = LocalDate.of(2019, 10, 10);
LocalTime of2 = LocalTime.of(18, 20, 30);
//年月日,时分秒 加上对应的时间量
//注意添加完相应的时间量后,返回的是一个新对象
LocalDateTime localDateTime = now.plusYears(1);
LocalDateTime localDateTime1 = now.plusMonths(1);
LocalDateTime localDateTime2 = now.plusDays(1);
LocalDateTime localDateTime3 = now.plusHours(1);
LocalDateTime localDateTime4 = now.plusMinutes(1);
LocalDateTime localDateTime5 = now.plusSeconds(1);
// 减去两年minusXxx
LocalDateTime localDateTime6 = now.minusDays(2);
System.out.println("******************************33333*******************************");
// 3、日期格式与字符串转换,格式化日期日期字符串的方法 format()
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateStr = "1997-11-09 12:12:12";
// str -> LocalDateTime
LocalDateTime date = LocalDateTime.parse(dateStr,dtf); //1997-11-09T12:12:12
// LocalDateTime -> str
String format = dtf.format(LocalDateTime.now()); //2020-09-13 10:48:08
// 3、获取年月日时分秒 -以及周几
int year = now.getYear();
int monthValue = now.getMonthValue();
int dayOfMonth = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int dayOfWeek = now.getDayOfWeek().getValue();
System.out.println("******************************44444********************************");
// 4、日期的比较
LocalDate nowLocalDate = LocalDate.now();
LocalDate hisDate = LocalDate.of(2010, 2, 19);
boolean before = hisDate.isBefore(nowLocalDate);//判断一个日期是否在指定日期之前
boolean after = hisDate.isAfter(nowLocalDate);//判断一个日期是否在指定日期之后
boolean equal = hisDate.equals(hisDate); //等值判断
boolean leapYear = nowLocalDate.isLeapYear();//判断是否是闰年注意是LocalDate类中的方法
boolean leapYear1 = hisDate.isLeapYear();//判断是否是闰年注意是LocalDate类中的方法
System.out.println("******************************55555********************************");
// 5、指定年月日时分秒的方法 with系列的方法 注意都会返回一个新的LocalDateTime的对象
//指完对应的日期后,返回的是一个新的日期对象
LocalDate localDate2 = LocalDate.now().withYear(2021);
//指定完对应的日期后,返回的是一个新的日期对象
LocalDate localDate3 = LocalDate.now().withMonth(2);
//TemporalAdjusters的一些预定义方法
// dayOfWeekInMonth 创建一个新的日期,它的值为同一个月中每一周的第几天
// firstDayOfMonth 创建一个新的日期,它的值为当月的第一天
// firstDayOfNextMonth 创建一个新的日期,它的值为下月的第一天
// firstDayOfNextYear 创建一个新的日期,它的值为明年的第一天
// firstDayOfYear 创建一个新的日期,它的值为当年的第一天
// firstInMonth 创建一个新的日期,它的值为同一个月中,第一个符合星期几要求的值
// lastDayOfMonth 创建一个新的日期,它的值为当月的最后一天
// lastDayOfNextMonth 创建一个新的日期,它的值为下月的最后一天
// lastDayOfNextYear 创建一个新的日期,它的值为明年的最后一天
// lastDayOfYear 创建一个新的日期,它的值为今年的最后一天
// lastInMonth 创建一个新的日期,它的值为同一个月中,最后一个符合星期几要求的值
// next/previous
// 创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星 期几要求的日期
// nextOrSame/previousOrSame创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星
// 期几要求的日期,如果该日期已经符合要求,直接返回该对象
LocalDateTime currentTime = LocalDateTime.now(); // 2020-09-13T11:04:26.156
TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfNextMonth(); // 2020-10-01T11:04:26.156
System.out.println("当前日期为 : "+currentTime);
System.out.println("TemporalAdjusters.firstDayOfNextMonth() = "+ currentTime.with(temporalAdjuster));
}
}