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 的先后顺序。
代码示例
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):根据指定的年、月、日创建日期。
代码示例
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) 等:用于减去相应的时间单位。
代码示例
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 等。
代码示例
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):判断两个日期是否相等。
代码示例
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):修改日期。
代码示例
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) 等:根据指定的时、分、秒创建时间。
代码示例
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):比较时间先后。
代码示例
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) 等:直接指定年、月、日、时、分等信息创建。
代码示例
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。
代码示例
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。
代码示例
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():分别获取时间间隔中的年、月、日数。
代码示例
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():将时间间隔转换为分钟、小时、天。
代码示例
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) 等。
代码示例
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);
}
}
重要知识点
- 定义 :
DateTimeFormatter 用于格式化和解析日期时间对象,将日期时间对象转换为字符串,或将字符串转换为日期时间对象。
- 创建方式
ofPattern(String pattern):根据指定的模式创建 DateTimeFormatter。
- 提供了一些预定义的格式化器,如
DateTimeFormatter.ISO_LOCAL_DATE、DateTimeFormatter.ISO_LOCAL_TIME 等。
- 常用方法
format(TemporalAccessor temporal):将日期时间对象格式化为字符串。
parse(CharSequence text, TemporalQuery<T> query):将字符串解析为日期时间对象。
代码示例
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);
}
}