java:日期时间操作方法(java的日期函数)

Java时间工具类TimeUtil详解:让日期操作变得简单高效

在Java开发中,日期时间处理是一个高频且容易出错的需求。为了简化开发流程,提高代码复用性,写了些常见的日期时间操作的工具类。本文将详细介绍该工具类的核心功能及使用方法。



一、工具类设计目标

  1. 简化操作:提供简洁的API处理日期格式化、计算、比较等常见操作
  2. 线程安全:基于Java 8的java.time包实现,天然支持线程安全
  3. 功能全面:覆盖开发中90%以上的日期时间需求场景
  4. 易于扩展:开放的工具类设计,方便根据需求添加新功能

二、核心功能详解

1. 日期格式化

提供三种格式化方法,支持自定义格式模板:

/**
 * 格式化日期(仅日期部分)
 * @param date LocalDate对象
 * @param pattern 格式模板(如"yyyy-MM-dd")
 */
public static String formatDate(LocalDate date, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return date.format(formatter);
}

/**
 * 格式化时间(仅时间部分)
 * @param time LocalTime对象
 * @param pattern 格式模板(如"HH:mm:ss")
 */
public static String formatTime(LocalTime time, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return time.format(formatter);
}

/**
 * 格式化完整日期时间
 * @param dateTime LocalDateTime对象
 * @param pattern 格式模板(如"yyyy-MM-dd HH:mm:ss")
 */
public static String formatDateTime(LocalDateTime dateTime, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return dateTime.format(formatter);
}

使用示例

LocalDate date = LocalDate.of(2023, 10, 1);
System.out.println(formatDate(date, "yyyy年MM月dd日")); // 输出:2023年10月01日

LocalTime time = LocalTime.of(14, 30);
System.out.println(formatTime(time, "HH时mm分")); // 输出:14时30分

LocalDateTime dateTime = LocalDateTime.of(2023, 10, 1, 14, 30);
System.out.println(formatDateTime(dateTime, "yyyy-MM-dd HH:mm")); // 输出:2023-10-01 14:30

2. 日期计算

提供日期加减和获取特殊日期的方法:

/**
 * 日期增加天数
 * @param date 原始日期
 * @param days 增加天数(支持负数)
 */
public static LocalDate addDays(LocalDate date, long days) {
    return date.plusDays(days);
}

/**
 * 获取本月第一天
 * @return 包含当前时间的本月第一天日期
 */
public static LocalDate getFirstDayOfMonth() {
    return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
}

/**
 * 获取本月最后一天
 * @return 包含当前时间的本月最后一天日期
 */
public static LocalDate getLastDayOfMonth() {
    return LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
}

使用示例

LocalDate today = LocalDate.now();
System.out.println("7天后:" + addDays(today, 7));
System.out.println("本月第一天:" + getFirstDayOfMonth());
System.out.println("本月最后一天:" + getLastDayOfMonth());

3. 日期比较

提供三种比较方法,返回布尔值:

/**
 * 判断date1是否在date2之后
 */
public static boolean isAfter(LocalDate date1, LocalDate date2) {
    return date1.isAfter(date2);
}

/**
 * 判断date1是否在date2之前
 */
public static boolean isBefore(LocalDate date1, LocalDate date2) {
    return date1.isBefore(date2);
}

/**
 * 判断两个日期是否相等
 */
public static boolean isEqual(LocalDate date1, LocalDate date2) {
    return date1.isEqual(date2);
}

使用示例

LocalDate dateA = LocalDate.of(2023, 10, 1);
LocalDate dateB = LocalDate.of(2023, 10, 5);
System.out.println(isAfter(dateA, dateB));  // false
System.out.println(isBefore(dateA, dateB)); // true
System.out.println(isEqual(dateA, dateA));  // true

4. 字符串解析

支持将字符串转换为日期对象,需指定格式模板:

/**
 * 解析日期字符串
 * @throws DateTimeParseException 格式不匹配时抛出
 */
public static LocalDate parseDate(String dateStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalDate.parse(dateStr, formatter);
}

/**
 * 解析时间字符串
 */
public static LocalTime parseTime(String timeStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalTime.parse(timeStr, formatter);
}

/**
 * 解析完整日期时间字符串
 */
public static LocalDateTime parseDateTime(String dateTimeStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalDateTime.parse(dateTimeStr, formatter);
}

使用示例

String dateStr = "2023-10-01";
LocalDate parsedDate = parseDate(dateStr, "yyyy-MM-dd");
System.out.println(parsedDate); // 输出:2023-10-01

5. 获取星期信息

支持获取中文星期表示:

/**
 * 获取当前日期对应的中文星期
 */
public static String getCurrentDayOfWeek() {
    return LocalDate.now().getDayOfWeek()
            .getDisplayName(TextStyle.FULL, Locale.CHINA);
}

使用示例

System.out.println("今天是:" + getCurrentDayOfWeek()); // 输出:今天是:星期一

三、使用建议

  1. 格式模板规范:建议使用ISO 8601标准格式(如yyyy-MM-dd),避免使用容易混淆的格式
  2. 异常处理:解析方法会抛出DateTimeParseException,调用时需做好异常捕获
  3. 性能优化:频繁使用的DateTimeFormatter建议缓存实例
  4. 扩展性:可根据需求添加时区转换、日期间隔计算等新功能

通过合理使用TimeUtil工具类,可以让日期时间处理变得像调用普通方法一样简单,显著提升开发效率。建议根据项目实际需求进行二次封装和扩展,打造专属的时间处理工具箱。

相关文章

疯传!Java 日期时间底层逻辑大揭秘,看完直接拿捏面试官挖的坑!

作为Java开发者,处理日期和时间是日常工作中的常见任务。本文将带你全面掌握Java日期时间处理的方方面面,从基础概念到高级应用,从常见陷阱到最佳实践。一、Java日期时间API演进史让我们先通过一个...

Java中玩转定时任务调度:让时间为你打工

Java中玩转定时任务调度:让时间为你打工Java作为一个功能强大的编程语言,提供了多种方式来实现定时任务调度。无论你是想执行一个简单的每日问候任务,还是需要处理复杂的数据处理任务,Java都有一系列...

java 日期时间API(java 日期函数)

以下是Java日期时间API的全面解析,涵盖新旧API对比、核心类使用、时区处理及最佳实践:一、Java日期时间演进史二、新旧API核心对比特性java.util.Datejava.time API可...

Java学习需要多长时间?(学java需要多久)

每个人都不一样,数智教育Java基础班,全天学习,差不多半年左右的时间如果你是自学,只能说Java 学习所需的时间因人而异,要考虑很多因素,包括你想学成什么样,你怎么学、目前会什么以及投入的学习时间等...

读取时间的速度(读取速度的快慢)

转自:https://www.brendangregg.com/blog/2021-09-26/the-speed-of-time.html读取时间需要多长时间?你会如何计时? 这些奇怪的问题早在 2...