时间函数使用总结:
1. 使用字符串初始化Date
String dateString = “2018-02-23”;
Date date= new SimpleDateFormat(“yyyy-MM-dd”).parse(dateString);
2. 使用时间戳初始化
Date date = new Date(时间戳);
3. 计算两个日期相差天数
long day = date1.getTime() - date2.getTime()) / (24*60*60*1000) + 1;
// 得微秒级时间差
long val = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis();
// 换算后得到天数
long day = val / (1000 * 60 * 60 * 24);
4. 使用Calendar
Calendar calendar=Calendar.getInstance();
Date date=calendar.getTime();
calendar.setTime(date);
5.获取年月日
calendar.get(Calendar.YEAR);
calendar.get(Calendar.MONTH) + 1;
calendar.get(Calendar.DAY_OF_MONTH); calendar.get()方法
calendar.get(Calendar.DAY_OF_WEEK); 当前周的第几天
calendar.get(Calendar.DAY_OF_MONTH); 当前月的第几天
calendar.get(Calendar.DAY_OF_YEAR); 当前年的第几天
7. calendar.add(field1,field2)方法
add方法可以修改当前的日期
field1指定修改的字段,可以为Calendar.DAY_OF_WEEK,DAY_OF_MONTH
filed2可以增加或减少天数,为int型
8. 判断某个日期是否在一定日期范围内:
return date.after(beginDate) && date.before(endDate); //开区间
9. Calendar的用法:可以获取当前的年份,月,天数,小时,分钟。可以进行时间的加减
10. Java8: LocalDate LocalTime
java.time.LocalDate.get(TemporalField field)
异常:
DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围。
UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过int。
ArithmeticException - 如果发生数字溢出。
ChronoField.DAY_OF_MONTH
Date转LocalDate
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault(); // atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
LocalDate转Date
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = LocalDate.now();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
Date date = Date.from(zdt.toInstant());
// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2014-12-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2014-12-02
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2014-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 变成了2015-01-01
// 取2015年1月第一个周一,这个计算用Calendar要死掉很多脑细胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05