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):根据 LocalDate 和 LocalTime 创建 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 结合了 LocalDate 和 LocalTime 的功能,适用于需要同时处理日期和时间的场景,如订单创建时间、会议安排等。它继承了 LocalDate 和 LocalTime 的大部分操作方法,方便进行日期和时间的组合操作。

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 对象(如 LocalDateTime、Instant 等)之间的时间间隔。
  • 常用方法
    • 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_DATE、DateTimeFormatter.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);
    }
}
相关推荐
怕浪猫4 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i5 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J6 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
leikooo6 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
言乐66 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
言乐67 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779137 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
Ivanqhz7 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
朝朝辞暮i7 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
沙漠之主8 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++