// 1、如何在java8中获取当天的日期
// java8中有个叫LocalDate的类,能用来表示今天的日期。这个类与java.util.Date略有不同,因为它只包含日期,没有时间。
// 2019-04-03
LocalDate date1 = LocalDate.now();
System.out.println(date1);
// 2、如何在java8中获取当前的年月日
// LocalDate类中提供了一些很方便的方法可以用来提取年月日以及其他的日期属性,特别方便
// ,只需要使用对应的getter方法就可以了,非常直观
// 2019-04-03
LocalDate date2 = LocalDate.now();
int year = date2.getYear();
int monthValue = date2.getMonthValue();
int dayOfMonth = date2.getDayOfMonth();
System.out.println(year+","+monthValue+","+dayOfMonth);
// 3、在java8中如何获取某个特定的日期
// 通过另一个方法,可以创建出任意一个日期,它接受年月日的参数,然后返回一个等价的LocalDate实例。
// 在这个方法里,需 要的日期你填写什么就是什么,不想之前的API中月份必须从0开始
// 2019-02-12
LocalDate date3 = LocalDate.of(2019, 2, 12);
System.out.println(date3);
// 4、在java8中检查两个日期是否相等
// LocalDate重写了equals方法来进行日期的比较,如下所示:
// 今天是2019.4.3吗:true
LocalDate date4 = LocalDate.now();
LocalDate date41=LocalDate.of(2019,4,3);
System.out.println("今天是2019.4.3吗:"+date41.equals(date4));
// 5、在java8中如何检查重复事件,比如生日
在java中还有一个与时间日期相关的任务就是检查重复事件,比如每月的账单日
如何在java中判断是否是某个节日或者重复事件,使用MonthDay类。这个类由月日组合,不包含年信息,
可以用来代表每年重复出现的一些日期或其他组合。他和新的日期库中的其他类一样也都是不可变且线程安全的,
并且它还是一个值类(value class)。
// 今天是您的生日吗:false
LocalDate date5 = LocalDate.of(2018, 1, 3);
LocalDate now5= LocalDate.now();
MonthDay monthDay5 = MonthDay.of(date5.getMonthValue(), date5.getDayOfMonth());
MonthDay now51 = MonthDay.from(now5);
System.out.println("今天是您的生日吗:"+now51.equals(monthDay5));
// 6、如何在java8中获取当前时间
// 这个与第一个例子获取当前日期非常相似,这里用的是LocalTime类,默认的格式是hh:mm:ss:nnn
// 15:03:23.540
LocalTime time1 = LocalTime.now();
System.out.println(time1);
// 7、如何增加时间里面的小时数
// 很多时候需要对时间进行操作,比如加一个小时来计算之后的时间,java8提供了更方便的方法 如plusHours,
// 这些方法返回的是一个新的LocalTime实例的引用,因为LocalTime是不可变的
LocalTime nextTwoLocalTime = LocalTime.now().plusHours(2);
System.out.println(nextTwoLocalTime);
// 8、如何获取1周后的日期
// 这个与前一个获取2小时后的时间的例子很相似,这里我们获取的是1周后的日期。LocalDate是用来表示无时间的日期,
// 他又一个plus()方法可以用来增加日,星期,月,ChronoUnit则用来表示时间单位,LocalDate也是不可变的,
// 因此任何修改操作都会返回一个新的实例
// 可以看到一周后的日期是什么,也可以用这个方法来增加一个月,一年,一小时,一分等等
LocalDate now8 = LocalDate.now();
LocalDate localDate8 = now8.plusWeeks(1);
System.out.println(localDate8);
// 9、年/月/周前后的日期
// 在上个例子中我们使用了LocalDate的plus()方法来给日期增加日周月,现在我们用minus()方法来找出一周前的那天
LocalDate now9 = LocalDate.now();
LocalDate localDate9 = now9.minusWeeks(1);
System.out.println(localDate9);
// 10、在java8中使用时钟
// java8自带了Clock类,可以用来获取某个时区下(所以对时区是敏感的)当前的瞬时时间、日期。
// 用来代替System.currentTimelnMillis()与TimeZone.getDefault()方法
Clock clock = Clock.systemUTC();
System.out.println(clock);
Clock clock1 = Clock.systemDefaultZone();
System.out.println(clock1);
// 11、在java中如何判断某个日期在另一个日期的前面还是后面
// 如何判断某个日期在另一个日期的前面还是后面或者相等,在java8中,LocalDate类中使用isBefore()、
// isAfter()、equals()方法来比较两个日期。如果调用方法的那个日期比给定的日期要早的话,
// isBefore()方法会返回true。equals()方法在前面的例子中已经说明了,这里就不举例了
LocalDate date11 = LocalDate.of(2018, 1, 2);
LocalDate now11 = LocalDate.now();
System.out.println(now11.isBefore(date11));
// 12、如何在java8中检查闰年
// LocalDate类由一个isLeapYear()方法来返回当前LocalDate对应的那年是否是闰年
LocalDate now12 = LocalDate.now();
System.out.println(now12+"是否是闰年:"+now12.isLeapYear());
// 13、两个日期之间包含多少天,多少月
// 计算两个日期之间包含多少天、周、月、年。可以用java.time.Period类完成该功能。
// 下面例子中将计算日期与将来的日期之间一共有几个月
Period between13 = Period.between(now5, now9);
// 14、在java8中获取当前时间戳
// java8获取时间戳特别简单。Instant类由一个静态的工厂方法now()可以返回当前时间戳
// 当前时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是java8以前的Date,
// 可以使用这个两个类中的方法在这两个类型之间进行转换,
// 比如Date.from(Instant)就是用来把Instant转换成java.util.date的,而Date。toInstant()就是将Date转换成Instant的
Instant now14= Instant.now();
// 15,如何在java8中使用预定义的格式器来对日期进行解析/格式化
// 在java8之前,时间日期的格式化非常麻烦,经常使用SimpleDateFormat来进行格式化,
// 但是SimpleDateFormat并不是线程安全的。在java8中,引入了一个全新的线程安全的日期与时间格式器
// 。并且预定义好了格式。比如,本例中使用的BASICISODATE格式会将20160414格式化成2016-04-14
String dateString = "20190403";
LocalDate parse = LocalDate.parse(dateString, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(parse);
//16.将时间格式化为字符串 “/dana/201904/” 的格式
public static String getFileSaveDir(String saveFolder) {
StringBuilder savePath = new StringBuilder();
LocalDate now = LocalDate.now();
System.out.println(now);
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyyMM");
String format = now.format(timeFormatter);
return savePath.append(saveFolder).append("/").append(format).append("/").toString();
}