日期

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

  1. 获取当前日期和时间

    Calendar calendar = Calendar.getInstance();
    Date currentDate = calendar.getTime();
    
  2. 获取特定字段的值(例如年、月、日、时、分、秒等)

    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); 
    
  3. 设定特定字段的值

    calendar.set(Calendar.YEAR, 2024);
    calendar.set(Calendar.MONTH, Calendar.JULY); // 月份也可以使用常量来设置
    calendar.set(Calendar.DAY_OF_MONTH, 24);
    
  4. 日期加减操作

    calendar.add(Calendar.DAY_OF_MONTH, 1); // 加一天
    calendar.add(Calendar.MONTH, -1); // 减一个月
    
  5. 边界

    // 某月有多少天
    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("时间段不重合。");
    }
}
posted @ 2023-02-10 22:10  CyrusHuang  阅读(25)  评论(0编辑  收藏  举报