当前位置: 首页 > news >正文

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的先后顺序。
代码示例
importjava.time.Instant;publicclassOrderService{publicvoidrecordOrderTime(){InstantorderTime=Instant.now();System.out.println("订单创建时间: "+orderTime);// 模拟订单处理 10 秒InstantprocessedTime=orderTime.plusSeconds(10);System.out.println("订单处理完成时间: "+processedTime);}}

2. java8 - LocalDate

重要知识点
  • 定义LocalDate表示一个不包含时间和时区的日期,例如 2025 - 02 - 24。
  • 创建方式
    • now():获取当前日期。
    • of(int year, int month, int dayOfMonth):根据指定的年、月、日创建日期。
代码示例
importjava.time.LocalDate;publicclassProductService{publicvoidcheckProductExpiry(){LocalDatecurrentDate=LocalDate.now();LocalDateexpiryDate=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)等:用于减去相应的时间单位。
代码示例
importjava.time.LocalDate;publicclassPromotionService{publicvoidcalculatePromotionEndDate(){LocalDatestartDate=LocalDate.now();LocalDateendDate=startDate.plusDays(7);System.out.println("促销开始日期: "+startDate);System.out.println("促销结束日期: "+endDate);}}

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

重要知识点
  • 可以使用plus(TemporalAmount amountToAdd)minus(TemporalAmount amountToSubtract)方法进行更灵活的日期加减操作,TemporalAmount可以是Period等。
代码示例
importjava.time.LocalDate;importjava.time.Period;publicclassDeliveryService{publicvoidestimateDeliveryDate(){LocalDateorderDate=LocalDate.now();PerioddeliveryPeriod=Period.ofDays(3);LocalDateestimatedDeliveryDate=orderDate.plus(deliveryPeriod);System.out.println("订单日期: "+orderDate);System.out.println("预计送达日期: "+estimatedDeliveryDate);}}

5. java8 - LocalDate 比较日期方法

重要知识点
  • 方法
    • isBefore(LocalDate other):判断当前日期是否在指定日期之前。
    • isAfter(LocalDate other):判断当前日期是否在指定日期之后。
    • isEqual(LocalDate other):判断两个日期是否相等。
代码示例
importjava.time.LocalDate;publicclassInvoiceService{publicvoidcheckInvoiceDueDate(){LocalDatecurrentDate=LocalDate.now();LocalDatedueDate=LocalDate.of(2025,3,1);if(currentDate.isAfter(dueDate)){System.out.println("发票已逾期");}elseif(currentDate.isBefore(dueDate)){System.out.println("发票未逾期");}else{System.out.println("发票今日到期");}}}

6. java8 - LocalDate 修改年月日

重要知识点
  • 方法
    • withYear(int year):修改年份。
    • withMonth(int month):修改月份。
    • withDayOfMonth(int dayOfMonth):修改日期。
代码示例
importjava.time.LocalDate;publicclassInventoryService{publicvoidadjustInventoryUpdateDate(){LocalDateoriginalDate=LocalDate.now();LocalDateadjustedDate=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)等:根据指定的时、分、秒创建时间。
代码示例
importjava.time.LocalTime;publicclassCustomerService{publicvoidcheckServiceHours(){LocalTimecurrentTime=LocalTime.now();LocalTimestartTime=LocalTime.of(9,0);LocalTimeendTime=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):比较时间先后。
代码示例
importjava.time.LocalTime;publicclassFlashSaleService{publicvoidcheckFlashSaleTime(){LocalTimecurrentTime=LocalTime.now();LocalTimesaleStartTime=LocalTime.of(12,0);LocalTimesaleEndTime=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)等:直接指定年、月、日、时、分等信息创建。
代码示例
importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;publicclassOrderProcessingService{publicvoidprocessOrder(){LocalDateorderDate=LocalDate.of(2025,2,24);LocalTimeorderTime=LocalTime.of(14,30);LocalDateTimeorderDateTime=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
代码示例
importjava.time.MonthDay;publicclassCustomerBirthdayService{publicvoidcheckCustomerBirthday(){MonthDaycurrentMonthDay=MonthDay.now();MonthDaycustomerBirthday=MonthDay.of(2,24);if(currentMonthDay.equals(customerBirthday)){System.out.println("今天是客户的生日,发送生日祝福和优惠活动");}}}

13. java8 - YearMonth

重要知识点
  • 定义YearMonth表示一年中的某个月,包含年份和月份信息,例如 2025 - 02。
  • 用途:常用于处理与月份相关的统计、报表等业务,如每月销售额统计。
  • 创建方式
    • now():获取当前的年和月。
    • of(int year, int month):根据指定的年和月创建YearMonth
代码示例
importjava.time.YearMonth;publicclassMonthlySalesService{publicvoidcalculateMonthlySales(){YearMonthcurrentYearMonth=YearMonth.now();System.out.println("当前统计月份: "+currentYearMonth);// 模拟计算该月销售额的逻辑System.out.println("该月销售额计算完成");}}

14. java8 - Period

重要知识点
  • 定义Period用于表示两个日期之间的时间间隔,以年、月、日为单位。
  • 创建方式
    • between(LocalDate startDate, LocalDate endDate):计算两个LocalDate之间的时间间隔。
  • 常用方法
    • getYears()getMonths()getDays():分别获取时间间隔中的年、月、日数。
代码示例
importjava.time.LocalDate;importjava.time.Period;publicclassOrderDurationService{publicvoidcalculateOrderDuration(){LocalDateorderDate=LocalDate.of(2025,1,1);LocalDatedeliveryDate=LocalDate.of(2025,1,10);Periodduration=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():将时间间隔转换为分钟、小时、天。
代码示例
importjava.time.Duration;importjava.time.LocalDateTime;publicclassPaymentProcessingService{publicvoidmeasurePaymentProcessingTime(){LocalDateTimepaymentStartTime=LocalDateTime.now();// 模拟支付处理逻辑try{Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}LocalDateTimepaymentEndTime=LocalDateTime.now();DurationprocessingDuration=Duration.between(paymentStartTime,paymentEndTime);System.out.println("支付处理耗时: "+processingDuration.getSeconds()+" 秒");}}

17. java8 - Duration 其他用法

重要知识点
  • Duration还可以进行时间间隔的加减操作,例如plus(Duration other)minus(Duration other)等。
代码示例
importjava.time.Duration;importjava.time.LocalDateTime;publicclassDeliveryEstimationService{publicvoidadjustDeliveryEstimation(){LocalDateTimeestimatedDeliveryTime=LocalDateTime.of(2025,2,25,10,0);Durationdelay=Duration.ofHours(2);LocalDateTimenewEstimatedDeliveryTime=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):将字符串解析为日期时间对象。
代码示例
importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassOrderDateDisplayService{publicvoiddisplayOrderDate(){LocalDateorderDate=LocalDate.of(2025,2,24);DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");StringformattedDate=orderDate.format(formatter);System.out.println("订单日期: "+formattedDate);StringdateString="2025-03-15";LocalDateparsedDate=LocalDate.parse(dateString,formatter);System.out.println("解析后的日期: "+parsedDate);}}
http://www.jsqmd.com/news/1302148/

相关文章:

  • 2026年漳州本地玻璃门门窗靠谱服务商介绍:家装、工装定制玻璃门加工厂甄选 - 海棠依旧大
  • MicroOrm.Dapper.Repositories实战案例:构建企业级.NET应用的数据访问层
  • OpCore-Simplify:终极黑苹果自动化配置工具,15分钟完成OpenCore EFI创建
  • 解决Arc Theme常见问题:Unity滚动条异常与GNOME兼容性修复
  • 为什么83%的医考生还在用纸质题库?AI动态组卷技术已让真题预测准确率达89.6%
  • 2026 年新发布:洛阳可靠的三角型电动排烟天窗定做厂家有哪些,这样东西竟能省下万元消防整改费?原来很多厂房早都用上了-鲁航通风设备 - 企业推荐管【认证】
  • 如何用5分钟打造你的专属Obsidian个性化首页:终极指南
  • CnOpenData 上市公司微博信息表
  • Nginx反向代理与性能优化:缓存/压缩/连接数调优
  • AI 创意工具的下一个拐点:从「生成」到「协作」的产品逻辑重构
  • 番茄小说下载器终极指南:一站式自动化工具助您轻松保存全网小说资源
  • Mybatis快速入门大全(详细版)
  • 2026年论文AIGC率多少正常?五档自测表告诉你要不要处理
  • 一篇公众号文章从写到发,到底卡在哪?
  • 大模型应用ROI评估与投入产出复盘:从成本到价值的系统性分析
  • OpenPDF的学习文档(第十一章加密)
  • 从基础到高级:shadcn-docs-nuxt文件结构与内容组织最佳实践
  • 2026执医笔试面授机构榜单出炉!别盲目报班,选对少走半年弯路 - 品牌测评鉴赏家
  • CnOpenData 上市公司app信息表
  • 银河麒麟V10多路径Multipath配置指南:存储链路高可用,不再随机掉盘
  • Nginx虚拟主机配置实战:server块逐行解释与多站点部署
  • MagiskOnWSALocal终极指南:如何在Windows安卓子系统获得完整root权限和Google服务
  • 谷歌DeepMind解散AlphaFold诺奖团队:技术路线分水岭,通用模型正在碾压专用路线
  • 写给大家的前端工程化实践手册:从个人技艺到团队基础设施
  • AI视频虚拟背景性能瓶颈全拆解:从GPU占用率98%到延迟<120ms的7步调优实录
  • 插件上架失败率高达68%?文心一言插件市场合规红线全梳理,开发者必读的8条生存法则
  • 7 月总结:Vue3 与 React 前端生态的实战洞察——选择比努力更重要
  • 2026主治医师考试备考期,多家培训课程特点对比分析 - 品牌测评鉴赏家
  • 神经网络组件权威解读:Backprop与Dropout的核心原理与应用指南
  • 线上事故复盘:一次HashMap.remove()引发的关键数据丢失案