JAVA如何获取当前时间呢?
下文笔者讲述java代码获取当前时间的方法及示例分享,如下所示
获取当前时间 方式1: 使用System.currentTimeMillis 方式2: 使用Date 方式3: 使用LocalDateTime 方式4: 使用开源工具 Joda-Time 使用开源工具Apache Commons Lang例
Java原生方法
使用System.currentTimeMillis() long currentTimeMillis = System.currentTimeMillis(); System.out.println("当前时间戳(毫秒): " + currentTimeMillis);
优点: 高效:直接调用系统的时间戳,无额外封装,性能最佳。 通用:可以轻松转换为Date或自定义格式 缺点: 返回的仅是毫秒级时间戳,需手动转换为人类可读的时间。 使用起来不够直观 适用场景: 适用于性能要求高的场景 如日志记录、计算耗时
使用Date类
import java.util.Date; Date date = new Date(); System.out.println("当前时间(Date): " + date);
优点: 简单直观,直接返回人类可读的时间。 缺点: 线程不安全:Date 类是可变的,多个线程操作同一个 Date 对象可能会出问题。 设计过时:Date 类的 API 设计不符合现代开发习惯,已被 java.time 替代。 适用场景: 早期项目中兼容性需求。
使用Calendar类
import java.util.Calendar; Calendar calendar = Calendar.getInstance(); System.out.println("当前时间(Calendar): " + calendar.getTime());
优点: 提供了丰富的时间操作方法 例: 增加天数、月份等。 缺点: 线程不安全:与 Date 类一样,Calendar 也是可变的,线程不安全。 冗长繁琐:API 使用起来较复杂且易出错。 适用场景: 当需要对时间进行复杂的调整操作时(如加减天数),但推荐使用 java.time 替代。
使用Java 8+时间API
Java 8 引入了 java.time 包,极大改善了时间处理的体验。 获取当前时间 import java.time.LocalDateTime; LocalDateTime now = LocalDateTime.now(); System.out.println("当前时间(LocalDateTime): " + now);
优点: 线程安全:java.time 中的所有类都是不可变且线程安全的。 丰富功能:支持多种操作,如加减时间、格式化等。 清晰直观:API 设计优雅,符合现代开发习惯。 缺点: 对于旧版代码需要迁移。 对新手可能稍显复杂。 适用场景: 几乎所有场景,特别是多线程和现代化应用开发。
使用开源工具类
使用Joda-Time
import org.joda.time.DateTime; DateTime dateTime = new DateTime(); System.out.println("当前时间(Joda-Time): " + dateTime);
优点: 丰富的时间操作功能(早期最强大的时间库)。 API 设计优雅,使用简单。 缺点: 已被 java.time 替代,功能基本被继承。 需要额外引入依赖。 适用场景: 老旧项目中使用 Joda-Time 时的兼容需求。
使用Apache Commons Lang
import org.apache.commons.lang3.time.DateUtils; Date now = new Date(); Date truncatedDate = DateUtils.truncate(now, Calendar.DATE); System.out.println("当前时间(Apache Commons Lang): " + truncatedDate);
优点: 提供了许多 Date 和 Calendar 的实用工具方法。 兼容性强,可与 Java 原生时间类配合使用。 缺点: 不支持现代化的 java.time API。 功能较为有限。 适用场景: 项目中已有 Commons Lang 依赖的场景。
各种获取当前时间的方法比较
方法 | 优点 | 缺点 | 推荐场景 |
System.currentTimeMillis | 性能高效,直接获取时间戳 | 无法直接获取人类可读的时间 | 需要计算耗时、记录日志时 |
Date | 简单易用,返回可读时间 线程不安全,API | 设计过时 | 兼容旧项目 |
Calendar | 支持丰富的时间操作 线程不安全,API | 冗长复杂 | 时间计算需求(不推荐,使用 java.time) |
LocalDateTime | 线程安全,功能强大,现代化 API | 对旧版代码迁移较多 | 多线程场景、现代化应用 |
Joda-Time | 设计优雅,功能强大 | 被 java.time 替代 | 老旧项目 |
Apache Commons Lang | 工具方法丰富,适配原生类 | 功能有限,依赖额外库 | 已引入 Commons Lang 的项目 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。