日期
Date
方法 | 描述 | 解释 |
---|---|---|
Date date1 = new Date() | 当前时间 | |
date1.getTime() | 获取时间对应的毫秒数 | 返回 long |
setTime(milliseconds) | 设置日期和时间 | 参数是一个毫秒数 |
date1.compareTo(date2) | 比较先后 | 负数:date1<date2 正数:date1 > date2 0 表示相等 |
date1.equals(date2) | 两个时间是否相等 |
// 日期转换为字符串
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
// 字符串转换为日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsedDate = formatter.parse(dateString);
Calendar
-
获取当前日期和时间
Calendar calendar = Calendar.getInstance(); Date currentDate = calendar.getTime();
-
获取特定字段的值(例如年、月、日、时、分、秒等)
int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); // 月份从0开始,0表示一月 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时制 int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); // 获取星期几,1表示星期日,2表示星期一,依此类推 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
-
设定特定字段的值
calendar.set(Calendar.YEAR, 2024); calendar.set(Calendar.MONTH, Calendar.JULY); // 月份也可以使用常量来设置 calendar.set(Calendar.DAY_OF_MONTH, 24);
-
日期加减操作
calendar.add(Calendar.DAY_OF_MONTH, 1); // 加一天 calendar.add(Calendar.MONTH, -1); // 减一个月
-
边界
// 某月有多少天 int maxDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); // 某年有多少天 int maxDaysInYear = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
JDK8 日期
方法 | 描述 | 解释 |
---|---|---|
localDate.firstDayOfMonth() | 创建一个新的日期,值为本月的第一天 | |
localDate.firstDayOfNextMonth() | 创建一个新的日期,值为下月的第一天 | |
localDate.lastDayOfMonth() | 创建一个新的日期,值为本月的最后一天 | |
localDate.lastDayOfNextMonth() | 创建一个新的日期,值为下个月的最后一天 | |
localDate.getYear() | 获取年,4位 | |
localDate.get(ChronoField.MONTH_OF_YEAR) | 获取月份,从1开始 | |
localDate.getDayOfMonth() | 获取月份中中第几天,从1开始 | |
localDate.getDayOfWeek() | 获取星期几,从1开始 | |
localDate.isLeapYear() | 是否是闰年 | |
localDate.lengthOfYear() | 一年多少天 | |
date1.compareTo(date2) | 比较大小 | 负数:date1<date2 正数:date1 > date2 0 表示相等 |
isBefore()、isAfter() 、 isEqual() | 也是比较大小 |
// 增加一年
localDate = localDate.plusYears(1);
localDate = localDate.plus(1, ChronoUnit.YEARS);
// 减少一个月
localDate = localDate.minusMonths(1);
localDate = localDate.minus(1, ChronoUnit.MONTHS);
// 减少一天
localDate = localDate.minusDays(1);
localDate = localDate.minus(1, ChronoUnit.DAYS);
// 修改年为 2020
localDate = localDate.withYear(2020);
localDate = localDate.with(ChronoField.YEAR, 2020);
// LocalDtaTime 转 String
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String str1 = localDateTime.format(dateTimeFormatter);
// String 转 LocalDtaTime
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate localDate = LocalDate.parse("2019-12-07 07:43:53", dateTimeFormatter);
// Date 转 LocalDataTime,两种方式
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
// LocalDateTime 转 Date
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
还有 YearMonth、LocalTime 对象
// 两个时间段是否有重合
public static boolean isOverlap(LocalDateTime start1, LocalDateTime end1,
LocalDateTime start2, LocalDateTime end2) {
return !end1.isBefore(start2) && !start1.isAfter(end2);
}
// 测试
public static void main(String[] args) {
LocalDateTime start1 = LocalDateTime.of(2024, 7, 24, 10, 0);
LocalDateTime end1 = LocalDateTime.of(2024, 7, 24, 12, 0);
LocalDateTime start2 = LocalDateTime.of(2024, 7, 24, 11, 0);
LocalDateTime end2 = LocalDateTime.of(2024, 7, 24, 13, 0);
boolean overlap = isOverlap(start1, end1, start2, end2);
if (overlap) {
System.out.println("时间段重合!");
} else {
System.out.println("时间段不重合。");
}
}