Java8 日期处理(详细版)

1. java8 - Instant

重要知识点
  • 定义Instant 表示时间线上的一个瞬时点,精确到纳秒,主要用于处理机器可读的时间戳,基于 Unix 时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 开始的秒数)。
  • 常用方法
    • now():获取当前的瞬时点。
    • plusSeconds(long secondsToAdd):在当前瞬时点上增加指定的秒数。
    • minusSeconds(long secondsToSubtract):在当前瞬时点上减去指定的秒数。
    • isBefore(Instant otherInstant)isAfter(Instant otherInstant):用于比较两个 Instant 的先后顺序。
代码示例
java 复制代码
import java.time.Instant;

public class OrderService {
    public void recordOrderTime() {
        Instant orderTime = Instant.now();
        System.out.println("订单创建时间: " + orderTime);

        // 模拟订单处理 10 秒
        Instant processedTime = orderTime.plusSeconds(10);
        System.out.println("订单处理完成时间: " + processedTime);
    }
}

2. java8 - LocalDate

重要知识点
  • 定义LocalDate 表示一个不包含时间和时区的日期,例如 2025 - 02 - 24。
  • 创建方式
    • now():获取当前日期。
    • of(int year, int month, int dayOfMonth):根据指定的年、月、日创建日期。
代码示例
java 复制代码
import java.time.LocalDate;

public class ProductService {
    public void checkProductExpiry() {
        LocalDate currentDate = LocalDate.now();
        LocalDate expiryDate = LocalDate.of(2025, 12, 31);
        if (currentDate.isAfter(expiryDate)) {
            System.out.println("商品已过期");
        } else {
            System.out.println("商品未过期");
        }
    }
}

3. java8 - LocalDate 日期加减

重要知识点
  • 方法
    • plusDays(long daysToAdd):增加指定的天数。
    • plusWeeks(long weeksToAdd):增加指定的周数。
    • plusMonths(long monthsToAdd):增加指定的月数。
    • plusYears(long yearsToAdd):增加指定的年数。
    • minusDays(long daysToSubtract)minusWeeks(long weeksToSubtract) 等:用于减去相应的时间单位。
代码示例
java 复制代码
import java.time.LocalDate;

public class PromotionService {
    public void calculatePromotionEndDate() {
        LocalDate startDate = LocalDate.now();
        LocalDate endDate = startDate.plusDays(7);
        System.out.println("促销开始日期: " + startDate);
        System.out.println("促销结束日期: " + endDate);
    }
}

4. java8 - LocalDate 日期加减方法续

重要知识点
  • 可以使用 plus(TemporalAmount amountToAdd)minus(TemporalAmount amountToSubtract) 方法进行更灵活的日期加减操作,TemporalAmount 可以是 Period 等。
代码示例
java 复制代码
import java.time.LocalDate;
import java.time.Period;

public class DeliveryService {
    public void estimateDeliveryDate() {
        LocalDate orderDate = LocalDate.now();
        Period deliveryPeriod = Period.ofDays(3);
        LocalDate estimatedDeliveryDate = orderDate.plus(deliveryPeriod);
        System.out.println("订单日期: " + orderDate);
        System.out.println("预计送达日期: " + estimatedDeliveryDate);
    }
}

5. java8 - LocalDate 比较日期方法

重要知识点
  • 方法
    • isBefore(LocalDate other):判断当前日期是否在指定日期之前。
    • isAfter(LocalDate other):判断当前日期是否在指定日期之后。
    • isEqual(LocalDate other):判断两个日期是否相等。
代码示例
java 复制代码
import java.time.LocalDate;

public class InvoiceService {
    public void checkInvoiceDueDate() {
        LocalDate currentDate = LocalDate.now();
        LocalDate dueDate = LocalDate.of(2025, 3, 1);
        if (currentDate.isAfter(dueDate)) {
            System.out.println("发票已逾期");
        } else if (currentDate.isBefore(dueDate)) {
            System.out.println("发票未逾期");
        } else {
            System.out.println("发票今日到期");
        }
    }
}

6. java8 - LocalDate 修改年月日

重要知识点
  • 方法
    • withYear(int year):修改年份。
    • withMonth(int month):修改月份。
    • withDayOfMonth(int dayOfMonth):修改日期。
代码示例
java 复制代码
import java.time.LocalDate;

public class InventoryService {
    public void adjustInventoryUpdateDate() {
        LocalDate originalDate = LocalDate.now();
        LocalDate adjustedDate = originalDate.withYear(2026).withMonth(6).withDayOfMonth(15);
        System.out.println("原库存更新日期: " + originalDate);
        System.out.println("调整后的库存更新日期: " + adjustedDate);
    }
}

7. java8 - LocalDate 使用总结

重要知识点
  • LocalDate 适用于处理只涉及日期的场景,如生日、到期日期、促销日期等。它提供了丰富的日期操作方法,包括日期的创建、加减、比较和修改等,使用起来非常方便。

8. java8 - LocalTime - 1

重要知识点
  • 定义LocalTime 表示一个不包含日期和时区的时间,例如 10:30:00。
  • 创建方式
    • now():获取当前时间。
    • of(int hour, int minute)of(int hour, int minute, int second) 等:根据指定的时、分、秒创建时间。
代码示例
java 复制代码
import java.time.LocalTime;

public class CustomerService {
    public void checkServiceHours() {
        LocalTime currentTime = LocalTime.now();
        LocalTime startTime = LocalTime.of(9, 0);
        LocalTime endTime = LocalTime.of(18, 0);
        if (currentTime.isAfter(startTime) && currentTime.isBefore(endTime)) {
            System.out.println("客服服务时间内");
        } else {
            System.out.println("客服休息时间");
        }
    }
}

9. java8 - LocalTime - 2

重要知识点
  • 时间操作方法
    • plusHours(long hoursToAdd)plusMinutes(long minutesToAdd) 等:增加相应的时间单位。
    • minusHours(long hoursToSubtract)minusMinutes(long minutesToSubtract) 等:减去相应的时间单位。
    • isBefore(LocalTime other)isAfter(LocalTime other):比较时间先后。
代码示例
java 复制代码
import java.time.LocalTime;

public class FlashSaleService {
    public void checkFlashSaleTime() {
        LocalTime currentTime = LocalTime.now();
        LocalTime saleStartTime = LocalTime.of(12, 0);
        LocalTime saleEndTime = saleStartTime.plusHours(1);
        if (currentTime.isAfter(saleStartTime) && currentTime.isBefore(saleEndTime)) {
            System.out.println("限时抢购进行中");
        } else {
            System.out.println("限时抢购未开始或已结束");
        }
    }
}

10. java8 - LocalDateTime

重要知识点
  • 定义LocalDateTime 表示一个既包含日期又包含时间的对象,不包含时区信息,例如 2025 - 02 - 24T10:30:00。
  • 创建方式
    • now():获取当前的日期和时间。
    • of(LocalDate date, LocalTime time):根据 LocalDateLocalTime 创建 LocalDateTime
    • of(int year, int month, int dayOfMonth, int hour, int minute) 等:直接指定年、月、日、时、分等信息创建。
代码示例
java 复制代码
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class OrderProcessingService {
    public void processOrder() {
        LocalDate orderDate = LocalDate.of(2025, 2, 24);
        LocalTime orderTime = LocalTime.of(14, 30);
        LocalDateTime orderDateTime = LocalDateTime.of(orderDate, orderTime);
        System.out.println("订单创建时间: " + orderDateTime);
    }
}

11. java8 - LocalDateTime 总结

重要知识点
  • LocalDateTime 结合了 LocalDateLocalTime 的功能,适用于需要同时处理日期和时间的场景,如订单创建时间、会议安排等。它继承了 LocalDateLocalTime 的大部分操作方法,方便进行日期和时间的组合操作。

12. java8 - MonthDay

重要知识点
  • 定义MonthDay 表示一年中的某个月和日,不包含年份信息,例如 --02 - 24。
  • 用途:常用于表示每年重复的日期,如生日、纪念日等。
  • 创建方式
    • now():获取当前的月和日。
    • of(int month, int dayOfMonth):根据指定的月和日创建 MonthDay
代码示例
java 复制代码
import java.time.MonthDay;

public class CustomerBirthdayService {
    public void checkCustomerBirthday() {
        MonthDay currentMonthDay = MonthDay.now();
        MonthDay customerBirthday = MonthDay.of(2, 24);
        if (currentMonthDay.equals(customerBirthday)) {
            System.out.println("今天是客户的生日,发送生日祝福和优惠活动");
        }
    }
}

13. java8 - YearMonth

重要知识点
  • 定义YearMonth 表示一年中的某个月,包含年份和月份信息,例如 2025 - 02。
  • 用途:常用于处理与月份相关的统计、报表等业务,如每月销售额统计。
  • 创建方式
    • now():获取当前的年和月。
    • of(int year, int month):根据指定的年和月创建 YearMonth
代码示例
java 复制代码
import java.time.YearMonth;

public class MonthlySalesService {
    public void calculateMonthlySales() {
        YearMonth currentYearMonth = YearMonth.now();
        System.out.println("当前统计月份: " + currentYearMonth);
        // 模拟计算该月销售额的逻辑
        System.out.println("该月销售额计算完成");
    }
}

14. java8 - Period

重要知识点
  • 定义Period 用于表示两个日期之间的时间间隔,以年、月、日为单位。
  • 创建方式
    • between(LocalDate startDate, LocalDate endDate):计算两个 LocalDate 之间的时间间隔。
  • 常用方法
    • getYears()getMonths()getDays():分别获取时间间隔中的年、月、日数。
代码示例
java 复制代码
import java.time.LocalDate;
import java.time.Period;

public class OrderDurationService {
    public void calculateOrderDuration() {
        LocalDate orderDate = LocalDate.of(2025, 1, 1);
        LocalDate deliveryDate = LocalDate.of(2025, 1, 10);
        Period duration = Period.between(orderDate, deliveryDate);
        System.out.println("订单从下单到送达历时: " + duration.getDays() + " 天");
    }
}

15. java8 - Period 使用总结

重要知识点
  • Period 主要用于处理日期之间的间隔,以年、月、日为单位进行计算。在处理与日期跨度相关的业务场景时非常有用,如计算订单处理周期、会员有效期等。

16. java8 - Duration

重要知识点
  • 定义Duration 用于表示两个时间点之间的时间间隔,以秒和纳秒为单位,适用于处理更精确的时间间隔,如程序执行时间、视频播放时长等。
  • 创建方式
    • between(Temporal startInclusive, Temporal endExclusive):计算两个 Temporal 对象(如 LocalDateTimeInstant 等)之间的时间间隔。
  • 常用方法
    • getSeconds():获取时间间隔的秒数。
    • toMinutes()toHours()toDays():将时间间隔转换为分钟、小时、天。
代码示例
java 复制代码
import java.time.Duration;
import java.time.LocalDateTime;

public class PaymentProcessingService {
    public void measurePaymentProcessingTime() {
        LocalDateTime paymentStartTime = LocalDateTime.now();
        // 模拟支付处理逻辑
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LocalDateTime paymentEndTime = LocalDateTime.now();
        Duration processingDuration = Duration.between(paymentStartTime, paymentEndTime);
        System.out.println("支付处理耗时: " + processingDuration.getSeconds() + " 秒");
    }
}

17. java8 - Duration 其他用法

重要知识点
  • Duration 还可以进行时间间隔的加减操作,例如 plus(Duration other)minus(Duration other) 等。
代码示例
java 复制代码
import java.time.Duration;
import java.time.LocalDateTime;

public class DeliveryEstimationService {
    public void adjustDeliveryEstimation() {
        LocalDateTime estimatedDeliveryTime = LocalDateTime.of(2025, 2, 25, 10, 0);
        Duration delay = Duration.ofHours(2);
        LocalDateTime newEstimatedDeliveryTime = estimatedDeliveryTime.plus(delay);
        System.out.println("原预计送达时间: " + estimatedDeliveryTime);
        System.out.println("调整后的预计送达时间: " + newEstimatedDeliveryTime);
    }
}

18. java8 - DateTimeFormatter

重要知识点
  • 定义DateTimeFormatter 用于格式化和解析日期时间对象,将日期时间对象转换为字符串,或将字符串转换为日期时间对象。
  • 创建方式
    • ofPattern(String pattern):根据指定的模式创建 DateTimeFormatter
    • 提供了一些预定义的格式化器,如 DateTimeFormatter.ISO_LOCAL_DATEDateTimeFormatter.ISO_LOCAL_TIME 等。
  • 常用方法
    • format(TemporalAccessor temporal):将日期时间对象格式化为字符串。
    • parse(CharSequence text, TemporalQuery<T> query):将字符串解析为日期时间对象。
代码示例
java 复制代码
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class OrderDateDisplayService {
    public void displayOrderDate() {
        LocalDate orderDate = LocalDate.of(2025, 2, 24);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formattedDate = orderDate.format(formatter);
        System.out.println("订单日期: " + formattedDate);

        String dateString = "2025-03-15";
        LocalDate parsedDate = LocalDate.parse(dateString, formatter);
        System.out.println("解析后的日期: " + parsedDate);
    }
}
相关推荐
米码收割机2 小时前
【项目】spring boot+vue3 宠物领养系统(源码+文档)【独一无二】
java·spring boot·宠物
叶 落2 小时前
Mac 通过 Miniconda 安装 Python
python·macos·conda·miniconda
刹那芳华19923 小时前
STMF+ESP-S+MQTT协议连接华为云端(附踩坑记录)
java·struts·华为
2601_958352908 小时前
接上USB,焊上麦,通话瞬间安静——WX-0813如何用AI降噪+100dB消回音,把嘈杂通话变成“金子“般清晰
人工智能·算法·语音识别·硬件开发·语音模块·降噪消回音
麻瓜生活睁不开眼9 小时前
Android16定制SearchLauncher新增投屏Cast桌面快捷图标完整实现
java·launcher·aosp16
小蒋学算法10 小时前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法
IT小盘10 小时前
12-Prompt不等于一句话-System-User-Context三层结构
java·windows·prompt
威联通安全存储11 小时前
TS-h1887XU-RP在汽车发动机热试与NVH在线质检网中的部署
python·汽车
我要见SA姐111 小时前
AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
人工智能·算法·游戏