学习经历:开始对时间的处理基本上都是用Date和Calendar,使用过的都知道要是想求某月的第一天或者日期在在这一年有多少天简直就是一个很大的工程,然后开始使用apache的Dbutils这个工具类,这个工具类是对前面两个进行的封装和处理也挺好用的。在这里就不做详细的介绍。最后开始学习java8新特性后,发现其中对时间的处理真的是很强大,而且也非常的好理解
LocalDate和LocalDateTime与String的相互转换
1. LocalDate与String的相互转化
DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String date = "2017-12-07";
//将String转化为LocalDate第一种方式
LocalDate localString1 = LocalDate.parse(date);
System.out.println("LocalDate1:"+localString1);
//localString1:2017-12-07
//将String转化为LocalDate第一种方式
LocalDate localString2 = LocalDate.parse(date, df2);
System.out.println("localDate2:" + localString2);
//localString2:2017-12-07
//LocalDate装化为String
LocalDate localDate = LocalDate.now();
String localDate1 = localDate.toString();
System.out.println("localDate1:"+localDate1);
//localDate1:2018-11-08
2. LocalDateTime与String的相互转化
DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String date = "2017-12-07 11:36:05";
//将String转化为LocalDate第一种方式
LocalDateTime localString1 = LocalDateTime.parse(date, df2);
System.out.println("localDate1:" + localString1);
//localDate2:2017-12-07T11:36:05
//将时间中的T去掉
System.out.println("localDate1:" + localString1.format(df2));
//localDate1:2017-12-07 11:36:05
3.比较两个日期间相差多少天
//比较两个日期相差多少天
LocalDate localDate1 = LocalDate.of(2018, 5, 3);
LocalDate localDate2 = LocalDate.of(2017, 6, 23);
System.out.println(localDate1.toEpochDay()-localDate2.toEpochDay());//314
4.获取指定日期(月初和月末)
// 获取今天的日期
LocalDate now = LocalDate.now();
// 今天是几号
int dayofMonth = now .getDayOfMonth();
// 今天是周几(返回的是个枚举类型,需要再getValue())
int dayofWeek = now .getDayOfWeek().getValue();
// 今年是哪一年
int dayofYear = now .getDayOfYear();
// 取本月第1天:
LocalDate firstDayOfThisMonth=now .with(TemporalAdjusters.firstDayOfMonth());
// 取本月第2天:
LocalDate secondDayOfThisMonth = now .withDayOfMonth(2);
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfMonth=now .with(TemporalAdjusters.lastDayOfMonth());
// 取下一天:
LocalDate firstDayOfNextMonth = lastDayOfMonth.plusDays(1);
// 取2019年1月第一个周一:
LocalDate firstMondayOf2017 = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
//本月的第一天
LocalDate monthFirstDay = LocalDate.of(now.getYear(),now.getMonth(),1);
//本月的最后一天
LocalDate monthLastDay =now.with(TemporalAdjusters.lastDayOfMonth());
//上月的第一天
LocalDate date = now.minusMonths(1).withDayOfMonth(1);
//上月的最后一天
LocalDate date1 = date.with(TemporalAdjusters.lastDayOfMonth());
介绍LocalDate API的介绍了
1. 静态方法
- now表示当前的时间 格式为yyyy-MM-dd形式
- of获得一个LocalDate的实例
- ofEpochDay给定时间距离1970-01-01有多少天
- ofYearDay返回一年中第多少天的日期
2. 普通方法
方法有很多但主要分为以下几种
- Plus*系列 getDayOfMonth(1)添加天数,正数表示加负数表示减,其他的一样可以添加月或者年。。。
- get*系列 getDayOfMonth()获取日期在表示的月份中第几天,当然也可以获取一年中第几天和一个星期的第几天。。。
- compareTo(LocalDate) 比较两个时间的大小 返回值分别是 1 0 -1
后续:基本有这样出来一般项目中遇到的时间处理都会很快,以后项目中在遇到其他复杂的时间处理在更新