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

Java时间API终极指南

Java 时间 API 概述

Java 提供了多个时间相关的 API,主要包括 java.util.Datejava.util.Calendarjava.time 包(Java 8 引入)。其中,java.time 是最现代且功能最全面的时间 API。以下分为新旧 API 分别介绍。


java.time 包(Java 8+ 推荐使用)

java.time 包分为多个类,包括 LocalDateLocalTimeLocalDateTimeZonedDateTime 等。

LocalDate(仅日期)
// 无参构造:获取当前日期
LocalDate today = LocalDate.now();
System.out.println("Today: " + today); // 输出:2023-10-05// 有参构造:指定日期
LocalDate specificDate = LocalDate.of(2023, 10, 1);
System.out.println("Specific Date: " + specificDate); // 输出:2023-10-01// 成员方法示例
LocalDate tomorrow = today.plusDays(1); // 增加 1 天
System.out.println("Tomorrow: " + tomorrow);int year = today.getYear(); // 获取年份
System.out.println("Year: " + year);

LocalTime(仅时间)
// 无参构造:获取当前时间
LocalTime currentTime = LocalTime.now();
System.out.println("Current Time: " + currentTime); // 输出:14:30:15.123// 有参构造:指定时间
LocalTime specificTime = LocalTime.of(12, 30, 45);
System.out.println("Specific Time: " + specificTime); // 输出:12:30:45// 成员方法示例
LocalTime laterTime = currentTime.plusHours(2); // 增加 2 小时
System.out.println("Later Time: " + laterTime);int hour = specificTime.getHour(); // 获取小时
System.out.println("Hour: " + hour);

LocalDateTime(日期 + 时间)
// 无参构造:获取当前日期和时间
LocalDateTime now = LocalDateTime.now();
System.out.println("Now: " + now); // 输出:2023-10-05T14:30:15.123// 有参构造:指定日期时间
LocalDateTime specificDateTime = LocalDateTime.of(2023, 10, 1, 12, 30);
System.out.println("Specific DateTime: " + specificDateTime); // 输出:2023-10-01T12:30// 成员方法示例
LocalDateTime nextMonth = now.plusMonths(1); // 增加 1 个月
System.out.println("Next Month: " + nextMonth);int dayOfMonth = specificDateTime.getDayOfMonth(); // 获取日
System.out.println("Day: " + dayOfMonth);

ZonedDateTime(带时区的日期时间)
// 无参构造:获取当前时区的日期时间
ZonedDateTime zonedNow = ZonedDateTime.now();
System.out.println("Zoned Now: " + zonedNow); // 输出:2023-10-05T14:30:15.123+08:00[Asia/Shanghai]// 有参构造:指定时区
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime newYorkTime = ZonedDateTime.now(zoneId);
System.out.println("New York Time: " + newYorkTime); // 输出:2023-10-05T02:30:15.123-04:00[America/New_York]// 成员方法示例
ZoneId currentZone = zonedNow.getZone(); // 获取时区
System.out.println("Current Zone: " + currentZone);


java.util.Date(旧 API,不推荐)

// 无参构造:当前时间
Date currentDate = new Date();
System.out.println("Current Date: " + currentDate); // 输出:Thu Oct 05 14:30:15 CST 2023// 有参构造:指定时间(毫秒时间戳)
Date specificDate = new Date(1696491000000L);
System.out.println("Specific Date: " + specificDate); // 输出:Wed Oct 04 00:00:00 CST 2023// 成员方法示例
long timeInMillis = currentDate.getTime(); // 获取毫秒时间戳
System.out.println("Time in Millis: " + timeInMillis);


java.util.Calendar(旧 API,不推荐)

// 无参构造:当前时间
Calendar calendar = Calendar.getInstance();
System.out.println("Calendar Time: " + calendar.getTime()); // 输出:Thu Oct 05 14:30:15 CST 2023// 有参构造:指定日期(需先获取实例再设置)
Calendar specificCalendar = Calendar.getInstance();
specificCalendar.set(2023, Calendar.OCTOBER, 1); // 注意月份从 0 开始
System.out.println("Specific Calendar: " + specificCalendar.getTime()); // 输出:Sun Oct 01 14:30:15 CST 2023// 成员方法示例
int month = calendar.get(Calendar.MONTH); // 获取月份(0-11)
System.out.println("Month: " + month);calendar.add(Calendar.DAY_OF_MONTH, 5); // 增加 5 天
System.out.println("After 5 Days: " + calendar.getTime());


总结

  • java.time(推荐):功能丰富,线程安全,适用于现代 Java 应用。
  • java.util.Date / Calendar(旧 API):存在设计缺陷,建议仅用于兼容旧代码。

使用时优先选择 java.time 包,代码更简洁、可读性更强。

http://www.lqws.cn/news/137035.html

相关文章:

  • 【输入URL到页面展示】
  • django paramiko 跳转登录
  • 【使用 Loki + Promtail + Grafana 搭建轻量级容器日志分析平台】
  • grafana 批量视图备份及恢复(含数据源)
  • 【更新中】(文档+代码)基于推荐算法和Springboot+Vue的购物商城
  • 每日算法刷题Day22 6.4:leetcode二分答案3道题,用时1h30min
  • [蓝桥杯]模型染色
  • [leetcode ] 5.29week | dp | 组合数学 | 图 | 打家劫舍
  • leetcode 455. Assign Cookies和2410. Maximum Matching of Players With Trainers
  • 【unity游戏开发入门到精通——通用篇】AssetBundle(AB包)和AssetBundleBrowser的使用介绍
  • Pytest+Selenium UI自动化测试实战实例
  • 霍夫曼编码详解
  • 【SpringCloud】Nacos配置中心
  • 【仿生】硬件缺失,与组装调试,皮肤问题
  • SPI通信协议(软件SPI读取W25Q64)
  • 嵌入式学习Day32
  • 【DAY39】图像数据与显存
  • AIGC1——AIGC技术原理与模型演进:从GAN到多模态融合的突破
  • 前端面试真题(第一集)
  • vxe-grid 双击行,打开expand的内容
  • 第十三节:第三部分:集合框架:Map集合的遍历方式
  • 第二章 进程管理
  • Inno Setup 安装向导各个页面详解
  • 简数采集技巧之快速获取特殊链接网址URL方法
  • 【大模型:知识图谱】--5.neo4j数据库管理(cypher语法2)
  • 查看服务应用是否有跑起来命令
  • Vue2 和 Vue3 常见 CSS 样式归纳总结
  • 图片压缩工具 | 图片生成PDF文档
  • AReaL-boba²:开源异步强化学习训练系统的革命性突破
  • [Java 基础]Java 中的关键字