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

Java8时间魔法:Duration与Period实战,精准掌控时间与日期间隔

1. Duration与PeriodJava8的时间魔法棒第一次接触Java8的日期时间API时我被LocalDate和LocalDateTime的简洁惊艳到了。但真正让我感受到时间魔法魅力的是在处理两个时间点间隔时遇到的Duration和Period。记得有次做会员系统需要计算用户剩余有效期天数用老Date API写了几十行还容易出错换成Period后三行代码搞定。Duration和Period就像时间计算领域的魔法棒一个专注处理时分秒的精确时间间隔Duration一个擅长处理年月日的日期间隔Period。它们都实现了TemporalAmount接口但分工明确Duration处理纳秒级精度的时间间隔适合计算程序执行耗时PT1.345S表示1.345秒视频时长PT2H35M表示2小时35分钟倒计时剩余时间Period处理日历日期间隔适合计算会员有效期P1Y3M表示1年3个月统计项目周期P2Y表示2年生成年龄描述P25Y表示25岁// 典型使用场景示例 LocalDateTime 下单时间 LocalDateTime.parse(2023-06-01T14:30:00); LocalDateTime 发货时间 LocalDateTime.now(); Duration 配送耗时 Duration.between(下单时间, 发货时间); System.out.println(您的订单将在配送耗时.toHours()小时内发货); LocalDate 生日 LocalDate.of(1990, 5, 20); Period 年龄 Period.between(生日, LocalDate.now()); System.out.println(用户年龄年龄.getYears()岁);2. Duration实战精确到纳秒的时间控制2.1 核心API深度解析Duration的底层由两部分组成秒数seconds和纳秒数nanos。这种设计让它既能处理人类可读的时间单位小时/分钟又能满足科学计算需要的纳秒精度。实际项目中我常用这些方法基础转换Duration 通话时长 Duration.ofMinutes(3).plusSeconds(45); System.out.println(通话时长.toMillis()); // 输出225000毫秒比较判断Duration 标准时长 Duration.ofHours(1); Duration 实际时长 Duration.between(startTime, endTime); if(实际时长.compareTo(标准时长) 0) { System.out.println(超时警告); }时间加减LocalDateTime 会议开始 LocalDateTime.now(); Duration 提前量 Duration.ofMinutes(15); LocalDateTime 提醒时间 会议开始.minus(提前量);2.2 避坑指南在电商系统开发中我踩过一个典型的时间计算坑用Duration处理跨天的营业时间计算。比如计算店铺从今天22:00到次日02:00的营业时长LocalTime 打烊时间 LocalTime.of(2, 0); Duration 营业时长 Duration.between(LocalTime.of(22, 0), 打烊时间); System.out.println(营业时长.toHours()); // 输出-20这里应该用Duration.between配合LocalDateTime处理跨日场景LocalDateTime 今日22点 LocalDate.now().atTime(22, 0); LocalDateTime 次日2点 今日22点.plusDays(1).withHour(2); Duration 正确时长 Duration.between(今日22点, 次日2点);3. Period实战日历日期的艺术3.1 年月日间隔计算Period最强大的能力在于处理日历日期的模糊性。比如计算1个月的间隔时它能自动考虑不同月份的天数差异。在财务系统中计算利息时特别有用LocalDate 起息日 LocalDate.of(2023, 1, 31); LocalDate 到期日 起息日.plus(Period.ofMonths(1)); System.out.println(到期日); // 输出2023-02-28自动处理2月天数但要注意Period.getDays()只返回天数部分要获取总天数应该用ChronoUnitPeriod period Period.between(LocalDate.now(), LocalDate.now().plusMonths(2)); System.out.println(period.getDays()); // 输出0因为月份变化但具体天数未设置 long 总天数 ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.now().plusMonths(2));3.2 生日计算最佳实践计算年龄是Period的经典场景但有几个细节要注意LocalDate 生日 LocalDate.of(1990, 2, 28); LocalDate 今天 LocalDate.of(2023, 2, 28); Period 年龄 Period.between(生日, 今天); System.out.println(年龄.getYears()); // 输出33正确 System.out.println(年龄.getMonths()); // 输出0 System.out.println(年龄.getDays()); // 输出0 // 闰年测试 LocalDate 闰年生日 LocalDate.of(2000, 2, 29); Period 特殊年龄 Period.between(闰年生日, LocalDate.of(2023, 2, 28)); System.out.println(特殊年龄.getYears()); // 输出22自动处理闰日4. 混合使用技巧与性能优化4.1 时间日期的组合运算在项目管理系统开发中我经常需要同时处理日期和时间间隔。比如计算项目周期3个月缓冲期72小时LocalDate 开始日期 LocalDate.now(); Period 项目周期 Period.ofMonths(3); Duration 缓冲期 Duration.ofHours(72); LocalDateTime 计划完成时间 开始日期 .plus(项目周期) .atStartOfDay() .plus(缓冲期);4.2 性能考量虽然Duration/Period的易用性很棒但在高频调用的场景需要注意避免重复创建对于固定时长如超时阈值应该静态化private static final Duration TIMEOUT Duration.ofSeconds(30);选择合适精度只需要秒级精度时不要用纳秒// 不好的写法 Duration.ofNanos(1_000_000_000L); // 好的写法 Duration.ofSeconds(1);批量计算优化处理大量日期时先用LocalDate做初步筛选再精细计算ListLocalDate 日期列表 // 从数据库获取的日期集合 LocalDate 基准日 LocalDate.now().minusMonths(3); // 先过滤再计算更高效 ListLocalDate 近期日期 日期列表.stream() .filter(d - d.isAfter(基准日)) .collect(Collectors.toList()); // 然后计算具体间隔 MapLocalDate, Period 间隔映射 近期日期.stream() .collect(Collectors.toMap( Function.identity(), d - Period.between(d, LocalDate.now()) ));

相关文章:

Java8时间魔法:Duration与Period实战,精准掌控时间与日期间隔

1. Duration与Period:Java8的时间魔法棒 第一次接触Java8的日期时间API时,我被LocalDate和LocalDateTime的简洁惊艳到了。但真正让我感受到时间魔法魅力的,是在处理两个时间点间隔时遇到的Duration和Period。记得有次做会员系统,…...

告别繁琐手动配置,用快马ai一键生成keil5安装与stm32工程初始化脚本

作为一名嵌入式开发爱好者,我深知Keil5安装和STM32开发环境配置的繁琐。每次换电脑或重装系统,都要重复一堆步骤,特别浪费时间。最近发现InsCode(快马)平台可以智能生成这类环境配置脚本,简直打开了新世界的大门。 环境检测自动化…...

新手福音:在快马平台跟随交互式教程轻松搞定openclaw安装

最近在学习openclaw这个工具时,发现很多教程要么太简略,要么步骤不完整,对新手特别不友好。后来在InsCode(快马)平台上发现可以创建交互式教程项目,就尝试做了一个完整的openclaw安装指南。整个过程比我预想的顺利很多&#xff0c…...

ARM Cortex-M开发避坑指南:DMB、DSB、ISB这三个内存屏障指令到底该怎么用?

ARM Cortex-M内存屏障实战手册:DMB/DSB/ISB的精准选择与避坑策略 当你在调试一个间歇性出现的DMA传输错误时,是否曾怀疑过是内存访问顺序的问题?在RTOS任务切换后寄存器值莫名其妙改变的场景中,是否考虑过指令流水线的影响&#x…...

引领RFID电子标签打印新时代,打造标识打印系统新标杆

在当今快速发展的数字化时代,RFID电子标签凭借其非接触式数据读取、大容量存储以及高可靠性等优势,在众多领域得到了广泛应用。而HCreateLabelView 标识打印系统作为上海平宇码创科技自主研发的核心产品,紧密贴合这一趋势,为RFID电…...

Multisim仿真进阶指南:从零构建PWM调光电路(附波形分析与调试秘籍)

1. PWM调光电路:从原理到Multisim实现 第一次接触PWM调光电路时,我被它精准的亮度控制能力惊艳到了。相比简单的呼吸灯电路,PWM调光可以通过调节占空比来实现LED从完全熄灭到最大亮度的无级调节,这在实际项目中特别实用。比如智能…...

5分钟部署!《崩坏:星穹铁道》全自动助手终极指南

5分钟部署!《崩坏:星穹铁道》全自动助手终极指南 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 你是否每天花费大量时间在《崩坏&#xff1a…...

AI赋能仿真:借助快马平台让ExtendSim模型学会智能预测与动态调整

今天想和大家分享一个很有意思的实践:如何用AI给传统仿真模型加点"智能"。最近在做一个服务系统的仿真项目,发现顾客等待行为其实很复杂——不同人的耐心程度差异很大,传统仿真很难准确模拟这种动态变化。于是尝试用机器学习来优化…...

快速原型:用快马AI十分钟搭建clawhub skill技能分享平台Demo

最近在尝试做一个技能分享平台的原型,正好用InsCode(快马)平台快速搭建了一个clawhub skill的demo。整个过程比想象中顺利很多,特别适合需要快速验证产品想法的时候使用。 用户系统搭建 从最基础的注册登录开始,用平台内置的模板快速生成了表…...

提升餐饮运营效率:用快马AI快速生成小龙虾库存与销售数据看板

最近在帮朋友优化他的小龙虾餐饮店运营流程,发现传统的手工记录库存和销售数据实在太费时费力了。于是尝试用InsCode(快马)平台快速搭建了一个数据管理工具,效果出乎意料的好。这里分享下具体实现思路和实际使用体验。 为什么需要这个工具 小龙虾餐饮店每…...

从GitLab迁移到轻量级Gogs:用Docker在个人服务器上搭建私有Git仓库全记录

从GitLab迁移到轻量级Gogs:用Docker在个人服务器上搭建私有Git仓库全记录 三年前我的团队还在使用GitLab CE管理代码,直到某天服务器监控突然报警——16GB内存被吃掉了92%。打开容器监控一看,GitLab容器独自占用了8GB内存,而我们…...

别再乱找数据集了!搞多模态大模型,这13个任务最常用的65个基准数据集我都帮你整理好了(附官网链接)

多模态大模型实战指南:65个核心数据集与13大任务全景解析 刚接触多模态大模型的研究者常会陷入"数据迷雾"——面对海量公开数据集却不知从何选起。我曾见过团队花费三周时间盲目测试不同视觉问答数据集,最终发现选用的基准与研究方向根本不匹…...

Docker下XTDrone仿真平台搭建全攻略(ROS-Noetic版,含常见错误解决方案)

Docker下XTDrone仿真平台搭建全攻略(ROS-Noetic版) 在无人机开发领域,仿真测试是验证算法、降低硬件损耗的关键环节。XTDrone作为国内开发者广泛使用的开源仿真平台,结合ROS和Gazebo提供了完整的无人机仿真解决方案。本文将带你从…...

MacBook Pro 触控板锁屏快捷设置指南

1. 为什么需要触控板快速锁屏功能 作为一个每天要处理大量敏感文档的MacBook Pro用户,我深刻理解快速锁屏的重要性。想象一下这样的场景:你正在咖啡馆处理工作邮件,突然需要去洗手间或者接电话,这时候如果慢慢点击菜单栏或者记忆复…...

KernelSU模块开发技术突破与实战指南

KernelSU模块开发技术突破与实战指南 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 在Android root解决方案领域,KernelSU凭借其内核级实现带来的稳定性和安全性&#xf…...

模板号:每一家创业公司都应该有企业官网

模板号(mobanhao.com):让每一家创业公司都能轻松拥有专业官网品牌定位:专注WordPress模板建站,服务创业型企业的数字化伙伴模板号(mobanhao.com)是一家专注于WordPress模板网站搭建的专业服务机构,总部位于中国改革开放的前沿阵地…...

实战演练:基于快马平台快速构建kafka电商用户行为分析系统

实战演练:基于快马平台快速构建Kafka电商用户行为分析系统 最近在做一个电商数据分析项目,需要实时追踪用户的点击和浏览行为。经过调研发现,Kafka作为分布式消息队列非常适合这种高吞吐量的场景。下面分享我是如何用InsCode(快马)平台快速搭…...

CCleaner Business 杀毒软件/电脑清理软件 下载安装

链接: https://pan.baidu.com/s/1KPHdTrkV5ElociuavFFrEA 提取码: j9c9此软件为免费开源软件,请勿利用于商业领域!!!...

为什么国内还没有出现网络安全巨头公司

国内坐拥广阔市场、政策持续加码,却始终没能诞生一家具备全球话语权、真正统领行业的龙头企业。看似热闹的产业图景背后,并非技术实力缺位,而是从需求逻辑、商业模式到市场生态,全链条深陷结构性困局,从根源上锁死了网…...

从零开始掌握DAO、DTO、DO等模型对象:开发中的核心概念解析

1. 为什么需要这么多对象模型? 刚入行的时候,我也被各种O搞晕过。DAO、DTO、DO、VO...这些看起来差不多的缩写,到底有什么区别?为什么不能用一个对象搞定所有事情?直到有次在项目里把所有数据都用Map传递,结…...

多组学联合分析揭示转录因子调控网络:ATAC-seq与RNA-seq的协同应用

1. 多组学联合分析的技术基础 在基因组学研究领域,ATAC-seq和RNA-seq已经成为揭示基因调控网络的两大核心技术。ATAC-seq全称是转座酶可及性染色质测序,它能够精准定位基因组中开放的染色质区域。想象一下,DNA就像一条紧密缠绕的毛线&#xf…...

基恩士KV系列轴控制FB模板库:全方位功能支持,详细文档助你轻松编程

基恩士KV7500,KV8000轴控制FB模板,直接可以拿来用,使基恩士编程也随心所欲。 包含了适配5种定位控制单元的FB,像常用的KV-XH16ML、KV-SH04PL等都有适配的FB。 功能上包含了原点返回、绝对定位、相对定位、速度控制、力矩控制、两轴直线插补等…...

OpenClaw本地代理方案:千问3.5-35B-A3B-FP8接口调用加速3种方法

OpenClaw本地代理方案:千问3.5-35B-A3B-FP8接口调用加速3种方法 1. 问题背景与挑战 去年夏天,当我第一次尝试用OpenClaw对接千问3.5-35B-A3B-FP8模型处理图文混合任务时,遇到了令人头疼的延迟问题。一个简单的"分析截图中的文字并生成…...

5KW MPPT控制器-太阳能系统用STM32F103RCT6主控平台

5KW MPPT控制器太阳能控制器 主控平台:STM32F103RCT6 逆变拓扑:BUCK-BOOST 功能:高效率MPPT控制器;支持给200V电池充电;485通讯,在线升级; 描述:本方案为AD格式原理图,PC…...

简化的Penman-Monteith公式变体

vic水文模型 VIC水文模型径流模拟 全程视频教学指导,讲解详细 从基础内容处理讲解到模型参数率定全程教学。 零基础可学。 自用模型,从零到实践,历时两周左右 全套教程最近在折腾VIC水文模型的径流模拟,发现这玩意儿就像搭乐高—…...

十分钟搞定口播智能体:用快马平台快速搭建旗博士原型

最近在做一个口播内容生成工具的原型验证,尝试了用InsCode(快马)平台快速搭建"旗博士"智能体的demo,整个过程比想象中顺畅很多。记录下这个十分钟搞定的开发过程,给需要快速验证AI产品创意的朋友参考。 明确核心功能需求 这个口播智…...

避开这些坑,你的芯片设计才能成功流片:CMOS制造工艺中的关键检查点详解

避开这些坑,你的芯片设计才能成功流片:CMOS制造工艺中的关键检查点详解 在芯片设计领域,流片失败往往意味着数百万美元的损失和数月的开发时间付诸东流。对于初入行的工程师而言,理解制造工艺中的潜在风险点比掌握正向设计流程更为…...

如何在Windows上获得完美的macOS光标体验:完整指南

如何在Windows上获得完美的macOS光标体验:完整指南 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/ma/macOS-c…...

基于FPGA的机器视觉缺陷检测实现铝片表面四缺陷精准检测:源码及测试文件共享,SSD-Mobi...

基于FPGA机器视觉缺陷检测 实现铝片表面四种缺陷的检测 包含源码和端测文件 使用SSD-MobileNetV1模型,识别精度达到85%以上。在工业检测领域,金属板表面缺陷检测的效率与精度直接影响产品质量管控水平。本文聚焦基于FPGA的机器视觉缺陷检测系统&#xff…...

SPI闪存性能优化实战:用STM32F1的DMA+NM25Q128实现高速数据记录

SPI闪存性能优化实战:用STM32F1的DMANM25Q128实现高速数据记录 在物联网设备数据采集场景中,嵌入式存储性能往往成为系统瓶颈。传统轮询方式操作SPI闪存时,CPU需要全程参与数据传输,导致吞吐量低下且系统资源占用率高。本文将深入…...