日期时间 API

news2025/3/1 8:33:51

日期时间 API (java.time 包),旨在解决旧版 java.util.Datejava.util.Calendar 存在的一些设计缺陷,比如线程不安全、时区处理不一致等问题。新 API 基于 ISO 8601 标准,更加直观、简洁,且支持时区和区域设置。主要类有:LocalDateLocalTimeLocalDateTimeZonedDateTimeInstantDurationPeriod 等。

1. LocalDate:表示日期(无时区)

LocalDate 用于表示没有时间部分和时区的日期(如:年-月-日)。

创建 LocalDate 实例
import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {
        // 当前日期
        LocalDate today = LocalDate.now();
        System.out.println("今天的日期: " + today);

        // 指定日期
        LocalDate specificDate = LocalDate.of(2025, 5, 15);
        System.out.println("指定日期: " + specificDate);

        // 从字符串创建
        LocalDate fromString = LocalDate.parse("2025-05-15");
        System.out.println("从字符串创建: " + fromString);
    }
}
常用方法
  • now():获取当前日期。
  • of(year, month, day):创建指定日期。
  • plusDays(long days):增加天数。
  • minusMonths(long months):减少月份。
  • getDayOfWeek():获取星期几。

2. LocalTime:表示时间(无日期、无时区)

LocalTime 表示一天中的时间(小时、分钟、秒),不涉及日期和时区。

创建 LocalTime 实例
import java.time.LocalTime;

public class LocalTimeExample {
    public static void main(String[] args) {
        // 当前时间
        LocalTime now = LocalTime.now();
        System.out.println("当前时间: " + now);

        // 指定时间
        LocalTime specificTime = LocalTime.of(14, 30);
        System.out.println("指定时间: " + specificTime);

        // 从字符串创建
        LocalTime fromString = LocalTime.parse("14:30:15");
        System.out.println("从字符串创建: " + fromString);
    }
}
常用方法
  • now():获取当前时间。
  • of(hour, minute):创建指定时间。
  • plusMinutes(long minutes):增加分钟。
  • minusSeconds(long seconds):减少秒数。
  • getHour():获取小时。

3. LocalDateTime:表示日期和时间(无时区)

LocalDateTime 结合了 LocalDateLocalTime,表示日期和时间,依然不涉及时区。

创建 LocalDateTime 实例
import java.time.LocalDateTime;

public class LocalDateTimeExample {
    public static void main(String[] args) {
        // 当前日期和时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前日期和时间: " + now);

        // 指定日期和时间
        LocalDateTime specificDateTime = LocalDateTime.of(2025, 5, 15, 14, 30);
        System.out.println("指定日期和时间: " + specificDateTime);

        // 从字符串创建
        LocalDateTime fromString = LocalDateTime.parse("2025-05-15T14:30:00");
        System.out.println("从字符串创建: " + fromString);
    }
}
常用方法
  • now():获取当前日期和时间。
  • of(year, month, day, hour, minute):创建指定日期和时间。
  • plusHours(long hours):增加小时数。
  • minusMinutes(long minutes):减少分钟数。
  • getYear():获取年份。

4. ZonedDateTime:表示带时区的日期和时间

ZonedDateTime 表示带有时区的日期时间,它可以精确到不同的时区,适用于跨时区的场景。

创建 ZonedDateTime 实例
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        // 当前时区的当前时间
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println("当前时区时间: " + now);

        // 指定时区的当前时间
        ZonedDateTime timeInLondon = ZonedDateTime.now(ZoneId.of("Europe/London"));
        System.out.println("伦敦的当前时间: " + timeInLondon);

        // 创建指定时间和时区
        ZonedDateTime specificDateTime = ZonedDateTime.of(2025, 5, 15, 14, 30, 0, 0, ZoneId.of("Asia/Shanghai"));
        System.out.println("指定时间和时区: " + specificDateTime);
    }
}
常用方法
  • now():获取当前时间和时区。
  • of(year, month, day, hour, minute, second, nanoOfSecond, zone):创建指定时区的日期和时间。
  • plusHours(long hours):增加小时数。
  • withZoneSameInstant(ZoneId zone):调整为指定时区的时间。
  • getZone():获取时区信息。

5. Instant:表示时间戳(自1970年1月1日起的秒数)

Instant 表示时间点,通常用于时间戳。它是自 UNIX 纪元(1970年1月1日)以来的秒数。适用于精确时间和存储时间。

创建 Instant 实例
import java.time.Instant;

public class InstantExample {
    public static void main(String[] args) {
        // 当前时间戳
        Instant now = Instant.now();
        System.out.println("当前时间戳: " + now);

        // 从秒数创建
        Instant specificInstant = Instant.ofEpochSecond(1672531199);
        System.out.println("指定时间戳: " + specificInstant);
    }
}
常用方法
  • now():获取当前的时间戳。
  • ofEpochSecond(long epochSecond):通过给定的秒数创建 Instant
  • plusSeconds(long seconds):增加秒数。
  • minusMillis(long millis):减少毫秒数。
  • toEpochMilli():返回自 Unix 纪元以来的毫秒数。

6. Duration 和 Period

  • Duration 用于表示时间上的差异,通常用于 纳秒 级别的操作。
  • Period 用于表示日期上的差异,通常用于
Duration 示例
import java.time.Duration;
import java.time.LocalTime;

public class DurationExample {
    public static void main(String[] args) {
        LocalTime startTime = LocalTime.of(10, 30);
        LocalTime endTime = LocalTime.of(12, 45);

        Duration duration = Duration.between(startTime, endTime);
        System.out.println("持续时间(小时和分钟): " + duration.toHours() + "小时 " + duration.toMinutes() % 60 + "分钟");
    }
}
Period 示例
import java.time.LocalDate;
import java.time.Period;

public class PeriodExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2020, 1, 1);
        LocalDate endDate = LocalDate.of(2025, 5, 15);

        Period period = Period.between(startDate, endDate);
        System.out.println("日期差异: " + period.getYears() + "年 " + period.getMonths() + "月 " + period.getDays() + "天");
    }
}
常用方法
  • Duration.between(start, end):计算两个时间点的持续时间。
  • Period.between(start, end):计算两个日期之间的差异。

总结

  • LocalDate:用于处理没有时间部分的日期。
  • LocalTime:用于处理没有日期部分的时间。
  • LocalDateTime:用于处理日期和时间,但不带时区。
  • ZonedDateTime:用于处理日期和时间,并带有时区。
  • Instant:表示时间戳,精确到秒和纳秒。
  • Duration 和 Period:分别表示时间和日期的差异。

这些类使得日期和时间的处理更加直观、安全,并且支持更复杂的日期时间计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI数字人开发,引领科技新潮流

引言 随着人工智能技术的迅猛发展,AI 数字人在影视娱乐、客户服务、教育及医疗等多个领域展现出巨大的潜力。本文旨在为开发者提供一份详细的 AI 数字人系统开发指南,涵盖从基础架构到实现细节的各个方面,包括人物建模、动作生成、语音交互、…

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…

STM32之影子寄存器

预分频寄存器计数到一半的时候,改变预分频值,此时不会立即生效,会等到计数完成,再从影子寄存器即预分频缓冲器里装载修改的预分频值。 如上图,第一行是内部时钟72M,第二行是时钟使能,高电平启动…

x64汇编下过程参数解析

简介 好久没上博客, 突然发现我的粉丝数变2700了, 真是这几个月涨的粉比我之前好几年的都多, 于是心血来潮来写一篇, 记录一下x64下的调用约定(这里的调用约定只针对windows平台) Windows下的x64程序的调用约定有别于x86下的"stdcall调用约定"以及"cdecl调用约…

Blender调整最佳渲染清晰度

1.渲染采样调高 512 2.根据需要 开启AO ,开启辉光 , 开启 屏幕空间反射 3.调高分辨率 4096x4096 100% 分辨率是清晰度的关键 , 分辨率不高 , 你其他参数调再高都没用 4.世界环境开启体积散射 , 可以增强氛围感 5.三点打光法 放在模型和相机45夹角上 白模 白模带线条 成品

TSMaster【第二十篇:华山论剑——知识图谱全览】

(三维思维导图「独孤九剑总诀式」技能树「经脉贯通」检测系统未来技术「武学秘境」预测) 【武侠场景导入】光明顶秘道惊变 明教光明顶密道中,张无忌面对错综复杂的甬道体系,以乾坤大挪移心法贯通九阳神功与太极拳剑,终成武林至尊。今时今日,三电工程师面对庞杂的TSMaste…

神经性手抖是一种常见的症状

神经性手抖是一种常见的症状,表现为手部无意识或不受控制地颤抖。为了预防神经性手抖,我们可以采取以下几种方法: 1. 放松身心:压力和焦虑是导致神经性手抖的常见原因之一。因此,学会放松身心是预防手抖的关键。可以通…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营,严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提,其中第十八条的规定堪称重中之重,是支付机构必须牢牢把握的关键准则。 第十八条明确指出,非银行支付机构需构建起必要且独…

支付宝 IoT 设备入门宝典(下)设备经营篇

上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中心,介绍常见的设备相关能力和问题解决方案。如果对上篇感兴趣,可以…

mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽

问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键,然后点击屏幕顶部的Wi-Fi图标;2.从下拉菜单中选择 “打开无线诊断”(Open Wireless Diagnostics);3.你可能会看到一个提示窗口,…

企业微信里可以使用的企业内刊制作工具,FLBOOK

如何让员工及时了解公司动态、行业资讯、学习专业知识,并有效沉淀企业文化?一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网,注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…

网络变压器的主要电性参数与测试方法(2)

Hqst盈盛(华强盛)电子导读:网络变压器的主要电性参数与测试方法(2).. 今天我们继续来看看网络变压器的2个主要电性参数与它的测试方法: 1. 线圈间分布电容Cp:线圈间杂散静电容 测试条件:100KHz/0.1…

深度学习笔记17-马铃薯病害识别(VGG-16复现)

目录 一、 前期准备 1. 设置GPU 2. 导入数据 二、手动搭建VGG-16模型 1. 搭建模型 三、 训练模型 1. 编写训练函数 3. 编写测试函数 4. 正式训练 四、 结果可视化 1. Loss与Accuracy图 2. 指定图片进行预测 3. 模型评估 前言 🍨 本文为🔗365天深度学习训…

#7 Diffusion for beginners

DDPM的原理讲解视频:DDPM explain,就是口音一言难尽 还有大佬从零开始搭建模型代码的视频:DDPM implementation,相当震撼,代码我从来都是粗粗的看个大概了事,大佬直接手撕 一个很好的资源集合网站:https://diff-usion.github.io/Awesome-Diffusion-Models/ 今天学习一段…

【计算机网络】TCP三次握手,四次挥手以及SYN,ACK,seq,以及握手次数理解

TCP三次握手图解 描述 第一次握手:客户端请求建立连接,发送同步报文(SYN1),同时随机一个seqx作为初始序列号,进入SYN_SENT状态,等待服务器确认 第二次握手:服务端收到请求报文,如果同意建立连接…

Spring Data JPA 中的分页实现:从 BasePage 到 Pageable

文章目录 Spring Data JPA 中的分页实现:从 BasePage 到 Pageable背景:为什么需要分页?认识 BasePage 类深入 toPageable() 方法1. 处理页码和页面大小2. 处理排序方向3. 处理排序字段4. 生成 Pageable 对象 实战:如何使用 BasePa…

智能家居遥控革命!昂瑞微HS6621EM:用「芯」定义AIoT时代的语音交互标杆

AIoT爆发期,遥控器为何成为智能家居的「隐形战场」? 随着Meta、苹果等巨头加速布局空间计算,智能家居生态正从「单一设备联网」向「全场景无感交互」跃迁。作为高频使用的入口设备,语音遥控器的性能直接决定用户体验天花板。昂瑞微…

Grafana使用日志7--开启Sigv4

背景 在Grafana中,有些data source是需要开启sigv4认证的,例如OpenSearch,这个配置项默认是关闭的,这里我们介绍一下怎么开启 步骤 传统方式 如果我们想在Grafana中开启sigv4认证,我们需要在grafana.ini中修改一个…

【Redis】Redis 入门

借鉴枫枫知道 一、连接 redis 1.1 命令行连接 // 完整的命令 redis-cli -h 127.0.0.1 -p 6379 -a password// 简写 redis-cli// 认证,进行redis之后 auth password1.2 go 代码连接 package mainimport ("fmt""github.com/go-redis/redis" …

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求,最近自己实践了一部分,部分信息是通过各渠道收集整理,so 仅供参考。 言归正转,大家都知道,DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…