package com.ydlclass.date;
import java.time.LocalDate;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
/**
* 本地时间Api
* 对获取本地时间十分友好
*/
public class LoacalDateTest {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
// System.out.println(now);//本地化输出时间,月份不需要在加1
int i = now.lengthOfYear();//获取本年多少天
int year = now.getYear();
int monthValue = now.getMonthValue();
LocalDate plus = now;
if (now.isSupported(ChronoUnit.DAYS)){//可以使用这个方法来判断是否支持这个字段
plus = now.plus(5, ChronoUnit.DAYS);//和Instant类很像的api方法调用
}
//定时任务,例如三年,三月,三周,三天后该做什么事情,使用这个方法用于定时
LocalDate localDate = now.withMonth(12);//返回一个本地时间副本,这个本地时间的月份是修改后的
//withmonth()方法,这个方法首先判断传入的月份的数值是否和当前实际月份相同,如果相同就直接返回当前时间,不同后会判断传入的数值是否满足
//月份的合理数值范围内,如果传入的数值在判断的合理范围内,就会抛出,异常
//例如将这里的时间改为13,LocalDate localDate = now.withMonth(13);//可以理解with是修改的的意思
/**
* 将会抛出如下的异常信息
* Exception in thread "main" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 13
* at java.base/java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311)
* at java.base/java.time.temporal.ChronoField.checkValidValue(ChronoField.java:717)
* at java.base/java.time.LocalDate.withMonth(LocalDate.java:1104)
* at com.ydlclass.date.LoacalDateTest.main(LoacalDateTest.java:22)
*/
System.out.println("year1:");
int year1 = now.getYear();
System.out.println(year1);
System.out.println("I1:");
int i1 = now.get(ChronoField.YEAR);//get方法是获取时间的字段,这里的功能和前面使用getyear()方法很像,但是get方法能够获取到更多的字段
System.out.println("ALIGNED_DAY_OF_WEEK_IN_MONTH:");
int i2 = now.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR);//直接使用可能会抛出异常,原因是get方法中就不支持这个字段的获取。
//对齐函数,,这个函数的实现其实就是判断当前这一天,如果在今年第一天和一周七天中的第一天开始对齐是,当下日期是周几,这就是对齐的实现
//无论是天以月内对齐,还是天以年内对齐,这两种方式的实现是分别获取当前日期在这个月内的第几天(当前日期在今年内的第几天),天数减一对7取余后,再加1
//以此获得对齐后的星期几的情况,这种方式还长见于其他语言中的内存对齐等,其他需要对齐的地方。
System.out.println(i2);
System.out.println(i1);
System.out.println(localDate);
System.out.println(plus);
System.out.println(monthValue);
}
}