Calendar的用法以及建议禁止用calendar 不建议用date 推荐用LocalDate、LocalTime、LocalDateTime【java8新提供的类】

1、通常使用Calendar,首先需要 Calendar calendar = Calendar.getInstance();

Calendar calendar = Calendar.getInstance();

指定时间:

calendar.setTime(date);//date为日期类型
//calendar.setTime(new Date());是指定日期为今
 int year = calendar.get(Calendar.YEAR);//获取年
 int month = calendar.get(Calendar.MONTH) + 1;//获取月,默认1月为0
 int day = calendar.get(Calendar.DATE);//获取当前日期的日
 int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月份最大的天数,使用这获取最后一天时,最好在Calendar calendar = Calendar.getInstance();加上calendar.clear();清楚系统时间,避免影响,要不然获取2月份最后一天可能有问题

更多用法请查看源码,

或者参考链接https://blog.csdn.net/tiantangdizhibuxiang/article/details/77429346

https://blog.csdn.net/qq_23332015/article/details/89555438

2、Java 8之后除了向前兼容外 Calendar沒有存在的意义了

Date用于记录某一个含日期的、精确到毫秒的时间。重点在代表一刹那的时间本身。

Calendar用于将某一日期放到历法中的互动——时间和年、月、日、星期、上午、下午、夏令时等这些历法规定互相作用关系和互动。Calendar本身代表公历的一个简化缩水版,姑且叫“计算机历”。

完整的公历是格里高利历,Java SE中以GregorianCalendar类来提供相关的历法功能。

参考链接https://juejin.im/post/6844903939402383368  

LocalDateTime转Date,以及设置上个月最后一天的最后一秒

LocalDateTime min = LocalDateTime.of(year, month - 1, 1, 23, 59, 59);
LocalDateTime with = min.with(TemporalAdjusters.lastDayOfMonth());//设置成上个月最后一天
java.util.Date minTime = Date.from(with.atZone(ZoneId.systemDefault()).toInstant());//转Date

Date转LocalDateTime参考链接https://www.cnblogs.com/xww115/p/11413668.html

LocalDate转Date

LocalDate localDate = LocalDate.of(year, month, 1);
java.util.Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

LocalDate和Date互转参考链接https://www.cnblogs.com/liusk/p/9882217.html

Date转LocalDate:

 LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 int year = localDate.getYear();
 int month = localDate.getMonthValue();

时间戳转Date

new Date(时间戳)