LocalDate主要的三个API类:
java.time.LocalDate;
java.time.LocalDateTime;
java.time.LocalTime;
LocatDate对象获取:
@Test void contextLoads() { // 获取方式 LocalDate localDate = LocalDate.now(); System.out.println(localDate); LocalDate localDate1 = LocalDate.of(2020, 5, 23); System.out.println(localDate1); // 2020-09-28 // 2020-05-23 int year = localDate.getYear(); // 取年 int monthValue = localDate.getMonthValue(); // 取月 Month month = localDate.getMonth(); // 取月的枚举对象 int monthValue1 = month.getValue(); // 具体值可以通过该枚举对象获取 // 除此之外Month还有一些获取其他信息的方法 int maxDaysLength = month.maxLength(); // 该月的最大天数 int minDaysLength = month.minLength(); // 该月的最小天数 int dayOfMonth = localDate.getDayOfMonth(); // 按当月取天数 int dayOfYear = localDate.getDayOfYear(); // 按本年取天数 DayOfWeek dayOfWeek = localDate.getDayOfWeek(); // 按本周取天数? // 和月枚举对象一样,这里也是一个周枚举对象 int value = dayOfWeek.getValue(); System.out.println(dayOfWeek); // 打印为 MONDAY .... } private static void cryptTest() { final String PASSWORD = "123456"; PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String encode = passwordEncoder.encode(PASSWORD); System.out.println(encode); boolean matches = passwordEncoder.matches(PASSWORD, encode); System.out.println(matches); }
LocalDateTime & LocalTime:
@Test void contextLoads() { LocalDateTime localDateTime1 = LocalDateTime.now(); LocalDateTime localDateTime2 = LocalDateTime.of(2020, 2, 2, 13, 24, 52); System.out.println(localDateTime1); // 2020-09-28T16:01:48.248 System.out.println(localDateTime2); // 2020-02-02T13:24:52 LocalTime localTime1 = LocalTime.now(); LocalTime localTime2 = LocalTime.of(20, 2, 2); System.out.println(localTime1); // 16:03:41.330 System.out.println(localTime2); // 20:02:02 int hour = localTime1.getHour(); int minute = localTime1.getMinute(); int second = localTime1.getSecond(); int nano = localTime1.getNano(); System.out.println("时 -> " + hour); // 时 -> 16 System.out.println("分 -> " + minute); // 分 -> 6 System.out.println("秒 -> " + second); // 秒 -> 26 System.out.println("Nano -> " + nano); // Nano -> 206000000 }
GET方法
SET方法
增加时间
减少时间
public class DateTest { public static void main(String[] args) { LocalDate now1 = LocalDate.now(); LocalTime now2 = LocalTime.now(); LocalDateTime now3 = LocalDateTime.now(); System.out.println("LocalDate.now() -> " + now1); System.out.println("LocalTime.now() -> " + now2); System.out.println("LocalDateTime.now() -> " + now3); /* LocalDate.now() -> 2020-04-19 LocalTime.now() -> 21:16:03.854 LocalDateTime.now() -> 2020-04-19T21:16:03.854 */ LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("localDateTime.getDayOfWeek() -> " + localDateTime.getDayOfWeek() ); // 按周算天 System.out.println("localDateTime.getDayOfMonth() -> " + localDateTime.getDayOfMonth() ); // 按月算天 System.out.println("localDateTime.getDayOfYear() -> " + localDateTime.getDayOfYear() ); // 按年算天 /* localDateTime.getDayOfWeek() -> SUNDAY localDateTime.getDayOfMonth() -> 19 localDateTime.getDayOfYear() -> 110 */ System.out.println( localDateTime.getSecond() );// 取秒 System.out.println( localDateTime.getMinute() );// 取分 System.out.println( localDateTime.getHour() );// 取时 System.out.println( localDateTime.getMonth() );// 取月 英文大写 System.out.println( localDateTime.getMonthValue() );// 取月 数值表示 System.out.println( localDateTime.getYear() );// 取年 // set × with √ } }
instant 瞬时时间 ,精度达到纳秒级
public class DateTest { public static void main(String[] args) { Instant instant = Instant.now(); System.out.println(instant); // 2020-04-19T13:47:58.712Z 本初子午线的标准时间 // 我们是东八时区,添加8小时的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); // 从实例获取毫秒数 时间戳 long epochMilli = instant.toEpochMilli(); System.out.println(epochMilli); // 通过时间戳注入产生instant实例 Instant epochMilli1 = Instant.ofEpochMilli(epochMilli); System.out.println(epochMilli1); } }
DateTimeFormatter
public class DateTest { public static void main(String[] args) { // 预定义的标准格式 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; // 事件对象 LocalDateTime now = LocalDateTime.now(); // 转换格式 日期 -> 字符串格式 String format = dateTimeFormatter.format(now); // 格式 System.out.println( now ); System.out.println( format ); // 日期 转 字符串格式 TemporalAccessor parse = dateTimeFormatter.parse("2020-03-19T22:09:46.345"); System.out.println(parse); DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); // ofLocalizedDateTime(); // ofLocalizedDate(); 按Date就支持FULL全格式 // ofPattern("自定义格式"); "yyyy-MM-dd hh:mm:ss" // FormatStyle.FULL 2020年4月19日 星期日 // FormatStyle.LONG 2020年4月19日 下午10时15分01秒 // FormatStyle.MEDIUM 2020-4-19 22:14:28 // FormatStyle.SHORT 20-4-19 下午10:16 String format1 = dateTimeFormatter1.format(now); System.out.println(now); System.out.println(format1); TemporalAccessor parse1 = dateTimeFormatter1.parse(format1); System.out.println(parse1); } }
案例,制作日历:
@Test void contextLoads() { localDateCalendar(); } private static void localDateCalendar() { LocalDate now = LocalDate.now(); int year = now.getYear(); int month = now.getMonth().getValue(); int dayOfMonth = now.getDayOfMonth(); // 设置这个月的第一天 now = now.minusDays(dayOfMonth - 1); // 找到这一天为周几 int value = now.getDayOfWeek().getValue(); // 开始渲染控制台输出样式 System.out.println("Mon Tue Wed Thu Fri Sat Sun"); for (int i = 1; i < value; i++) System.out.print(" "); while (now.getMonthValue() == month) { System.out.printf("%3d", now.getDayOfMonth()); if (now.getDayOfMonth() == dayOfMonth) System.out.print("*"); else System.out.print(" "); now = now.plusDays(1); if (now.getDayOfWeek().getValue() == 1) System.out.println(); } if (now.getDayOfWeek().getValue() != 1) System.out.println(); }
打印结果:
Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28* 29 30
其他API
ZoneId
ZoneDateTime
Clock
Duration
Period
TemporalAdjuster
TemporalAdjusters