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 的项目 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


