JAVA时间类型:Date、Calendar、SimpleDateFormat、LocalDate 、LocalTime、LocalDateTime、DateTimeFor的使用与转换
一、Date、SimpleDateFormat
//获取当前时间
Date date = new Date(); // Mon Jul 17 11:34:57 CST 2023
//格式化时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date); //2023-07-17 11:38:52
//获取时间戳
long time = date.getTime(); // 1689565273205
Date date2 = sdf.parse("2023-01-03 00:00:00");
//判断此日期是否在指定日期之前
boolean before = date2.before(date); // true
//判断此日期是否在指定日期之后
boolean after = date.after(date2); // true
//转换成Instant
Instant instant =date.toInstant();
其他获取年月日方法基本不用了就不写了
二、Calendar
可以把Calendar看做是Date类的plus版本。但是其底部也是通过new Date() 获取Date实例
常量 | 描述 |
---|---|
Calendar.YEAR | 年 |
Calendar.MONTH | 月 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
//抽象类不能直接获取对象, 注意calendar修改后其对象本身表示的时间将产生变化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
Date date= calendar.getTime(); //获取时间
calendar.setTime(sdf.parse("2023-07-07 00:00:00")); //设置时间
Date dateNew = calendar.getTime(); //获取时间
//转换 此时结果为2023-07-07 00:00:00
String dateStr = dateFormat.format(dateNew);
//获取某个时间字段信息
calendar.get(Calendar.YEAR); // 2023
//年字段增加/减少指定的值
calendar.add(Calendar.YEAR, 1); // 2024
//月字段增加/减少指定的值
calendar.add(Calendar.MONTH, 1);
// 月是从0开始此时单独获取月返回的是7需要注意,所有一半都是结果加一
calendar.get(Calendar.MONTH);
sdf.format(calendar.getTime()); // 2024-08-07 00:00:00
// 其余用表格列出
三、LocalDate 、LocalTime、LocalDateTime
LocalDate 只包含年月日
localTime 只包含日期 (注意结果不止时分秒)
localDateTime 包含日期和时间
获取年月日(方法相同用localDateTime)
//创建对象
LocalDate localDate = LocalDate.now(); // 2023-07-17
LocalTime localTime = LocalTime.now(); // 14:22:08.710
LocalDateTime localDateTime = LocalDateTime.now(); // 2023-07-17T14:22:08.710
//年
localDateTime.getYear(); // 2023
//月
localDateTime.getMonth(); // JULY
//月
localDateTime.getMonthValue(); // 7 此处返回是正常结果无需+1
//获取年中第几天
localDateTime.getDayOfYear(); // 198
//获取月中第几天
localDateTime.getDayOfMonth();// 17
//获取星期
localDateTime.getDayOfWeek(); //MONDAY
修改年月日(方法相同用localDate)
LocalDate localDate = LocalDatee.now(); // 2023-07-17
//修改该日期的年份
LocalDate localDate1 = localDate.withYear(1999); // 1999-07-17
//修改当前的日期的月份
LocalDate localDate2 = localDate.withMonth(2); // 2023-02-17
//修改该日期当月的天数
LocalDate localDate3 = localDate.withDayOfMonth(12); // 2023-07-12
//增加修改日期(正数;负数)
//年加一
LocalDate localDate4 = localDate.plusDays(1); // 2024-07-17
//年减一
LocalDate localDate4 = localDate.minusDays(1); // 2024-07-17
//日期加一
LocalDate localDate4 = localDate.plusDays(1); // 2023-07-18
//日期减一
LocalDate localDate4 = localDate.minusDays(1); // 2023-07-16
// 是否是闰年
boolean isLeapYear = localDate.isLeapYear(); //false
// 判断该年是356还是366天
int value = localDate.lengthOfYear(); //365
// 当月天数
LocalDate localDate5 = LocalDate.now();
int monthDaySum = localDate5.lengthOfMonth(); //31
// 比较日期大小,返回正数,那么当前的对象时间较晚(数字较大).返回0相等
LocalDate localDate6 = LocalDate.now();
LocalDate localDate7 = LocalDate.now();
int value2 = localDate6.compareTo(localDate7); // 0
plusDays()增加,当值为负数也可以减少。minusDays()减少,当值为负数也可以增加
四、DateTimeFormatter 格式化与格式转换
LocalDateTime转字符串、自定义时间
LocalDateTime localDateTime = LocalDateTime.now(); // 2023-07-17T15:14:16.697
localDate = localDateTime.toLocalDate();
localTime = localDateTime.toLocalTime();
//JDK8 新推出的
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 转字符串 两种方式相互都可以
String localDateTime1 = localDateTime.format(dtf) // 2023-07-17 15:14:16
String localDateTime2 = dtf.format(localDateTime); // 2023-07-17 15:14:16
//自定义时间
LocalDateTime localDateTime1 = LocalDateTime.parse("2023-07-07 00:00:00", dtf);
五、总结
写完一篇文章其实就可以发现,大多数的时间修改对比都是差不多的。我觉得主要就是要了解一些比较特殊。其他的其实知道一个之后。另一个时间类也可以直接出来。毕竟IEDA提示功能也会给我们一些提示的