java获取时间的方法归纳

本文介绍了如何在Java中获取当前时间的三种不同格式:通用日期时间格式、长日期格式和精确到毫秒的日期时间格式。

一、获取当前时间,   格式为:   yyyy-mm-dd   hh-mm-ss

DateFormat.getDateTimeInstance(2, 2, Locale.CHINESE).format(new java.util.Date());

 

二、获取当前时间,   格式为:   yyyymmdd   上午/下午hhmmss

DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG,   Locale.CHINESE).format(new java.util.Date());

 

三、获取当前时间(精确到毫秒),   格式为:   yyyy-mm-dd   hh:mm:ss.nnn

new java.sql.Timestamp(System.currentTimeMillis()).toString();

 

 

<think>我们正在讨论的是Java获取当前时间方法。根据引用内容,我们可以总结出几种常见的方法。注意,引用中提到的三种或四种方法其实可以归纳为几个核心类:Date、System.currentTimeMillis()、Calendar(较旧的方法)以及Java 8引入的java.time包中的类(如LocalDateTime和Instant)。 根据引用: - 引用[1]提到了三种方法:Date类、LocalDateTime类(Java 8+)、Instant类(Java 8+)。 - 引用[2]提到了三种方法:System.currentTimeMillis()、Date类、Calendar类。 - 引用[3]和[引用4]主要提到了Date类。 - 引用[5]提到了四种方法,但总结中提到了Date类和System.currentTimeMillis(),以及设置时间格式的方法。 由于用户的问题是在Java获取当前时间,我们需要提供多种方法,并指出它们的特点和适用场景。 以下将按照不同的方法进行分类: 1. **使用`java.util.Date`类**(传统方式,但已过时): ```java Date date = new Date(); // 创建一个代表当前时间的Date对象 System.out.println(date); // 输出:Wed Mar 20 11:50:49 CST 2024 ``` 2. **使用`System.currentTimeMillis()`方法**(获取时间戳): ```java long currentTimeMillis = System.currentTimeMillis(); // 返回当前时间与1970年1月1日0时0分0秒UTC的毫秒差 System.out.println(currentTimeMillis); // 输出:1679291449000 ``` 3. **使用`java.util.Calendar`类**(传统方式,但已过时): ```java Calendar calendar = Calendar.getInstance(); // 获取一个Calendar实例,表示当前时间 Date date = calendar.getTime(); // 转换为Date对象 ``` 4. **使用Java 8及以后引入的`java.time`包**(推荐方式): - `LocalDateTime`:获取当前日期和时间(不含时区信息) ```java LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 输出:2024-03-20T11:50:49.123 ``` - `Instant`:获取时间戳(与`System.currentTimeMillis()`类似,但精度更高,可到纳秒) ```java Instant instant = Instant.now(); System.out.println(instant); // 输出:2024-03-20T03:50:49.123Z(UTC时间) ``` - `ZonedDateTime`:获取带时区的当前时间 ```java ZonedDateTime zonedDateTime = ZonedDateTime.now(); System.out.println(zonedDateTime); // 输出:2024-03-20T11:50:49.123+08:00[Asia/Shanghai] ``` 5. **格式化时间**: 通常我们获取时间后需要格式化输出,可以使用`SimpleDateFormat`(对于Date类)或`DateTimeFormatter`(对于Java 8的时间类): - 格式化`Date`: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(new Date()); System.out.println(formattedDate); // 输出:2024-03-20 11:50:49 ``` - 格式化`LocalDateTime`: ```java DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = LocalDateTime.now().format(formatter); System.out.println(formattedDateTime); // 输出同上 ``` **总结与建议**: - 在Java 8之前,常用的方法是`Date`和`Calendar`,但这两个类存在设计缺陷(如可变性、时区处理麻烦等),不推荐在新代码中使用。 - 如果只是需要时间戳,使用`System.currentTimeMillis()`性能最好。 - 在Java 8及以上,推荐使用`java.time`包(即JSR 310)中的类,如`LocalDateTime`、`Instant`等,它们提供了更清晰、更强大的API,并且线程安全。 因此,我们给出以下示例代码,展示不同方法: ```java import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; public class GetCurrentTimeExample { public static void main(String[] args) { // 方法1:使用Date类 Date date = new Date(); System.out.println("Date: " + date); // 方法2:使用System.currentTimeMillis() long currentTimeMillis = System.currentTimeMillis(); System.out.println("currentTimeMillis: " + currentTimeMillis); // 方法3:使用Java 8的LocalDateTime LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("LocalDateTime: " + localDateTime); // 方法4:使用Java 8的Instant Instant instant = Instant.now(); System.out.println("Instant: " + instant); // 方法5:使用Java 8的ZonedDateTime ZonedDateTime zonedDateTime = ZonedDateTime.now(); System.out.println("ZonedDateTime: " + zonedDateTime); // 格式化时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Formatted Date: " + sdf.format(date)); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("Formatted LocalDateTime: " + localDateTime.format(dtf)); } } ``` 运行结果示例: ``` Date: Wed Mar 20 11:50:49 CST 2024 currentTimeMillis: 1679291449000 LocalDateTime: 2024-03-20T11:50:49.123 Instant: 2024-03-20T03:50:49.123Z ZonedDateTime: 2024-03-20T11:50:49.123+08:00[Asia/Shanghai] Formatted Date: 2024-03-20 11:50:49 Formatted LocalDateTime: 2024-03-20 11:50:49 ``` **注意事项**: - 如果项目运行在Java 8以下环境,则只能使用`Date`、`Calendar`和`System.currentTimeMillis()`。 - 在Java 8及以上,优先使用`java.time`包中的类。 相关问题: 1. 在Java 8中,如何将`LocalDateTime`转换为`Date`对象? 2. 使用`System.currentTimeMillis()`和`Instant.now()`获取时间戳,它们之间有什么区别? 3. 在Java中如何获取当前时间的毫秒数或秒数? 4. 为什么说`java.util.Date`和`Calendar`类已经过时?它们有什么缺点?</think>### Java 获取当前时间方法总结 以下是 Java 获取当前时间的 5 种常用方法,根据引用资料整理并补充完整示例: #### 1. **使用 `java.util.Date` 类(传统方式)** ```java import java.util.Date; public class Main { public static void main(String[] args) { Date date = new Date(); // 创建包含当前时间的对象 System.out.println("当前时间: " + date); // 输出示例: Wed Mar 20 11:50:49 CST 2024 [^3][^4] } } ``` **特点**: - 最简单直接的方式 - 输出包含星期、月、日、时间、时区和年 - 线程安全(每次 new 创建新对象) #### 2. **使用 `System.currentTimeMillis()`(高性能时间戳)** ```java public class Main { public static void main(String[] args) { long timestamp = System.currentTimeMillis(); // 获取毫秒级时间戳 System.out.println("时间戳: " + timestamp); // 输出示例: 1710921049123 (表示 2024-03-20 11:50:49.123) // 转换为可读格式 Date date = new Date(timestamp); System.out.println("转换后时间: " + date); [^2] } } ``` **特点**: - 性能最优(无需创建对象) - 不受时区影响 - 适合性能敏感场景 [^2] #### 3. **使用 `java.time.LocalDateTime`(Java 8+ 推荐)** ```java import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); // 获取当前日期+时间 System.out.println("ISO格式: " + now); // 输出: 2024-03-20T11:50:49.123 // 自定义格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("自定义格式: " + now.format(formatter)); // 输出: 2024-03-20 11:50:49 [^1][^5] } } ``` **特点**: - 线程安全(不可变对象) - 支持纳秒级精度 - 丰富的日期时间操作 API [^1] #### 4. **使用 `java.time.Instant`(时间戳标准表示)** ```java import java.time.Instant; public class Main { public static void main(String[] args) { Instant instant = Instant.now(); // UTC 标准时间 System.out.println("UTC时间戳: " + instant); // 输出: 2024-03-20T03:50:49.123Z [^1] } } ``` **特点**: - 精确到纳秒 - 适合跨时区应用 - 符合 ISO-8601 标准 #### 5. **使用 `Calendar` 类(传统方式,可扩展)** ```java import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 获取日历实例 System.out.println("完整时间: " + calendar.getTime()); // 获取独立时间分量 int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); System.out.printf("当前时分: %02d:%02d", hour, minute); // 输出: 当前时分: 11:50 [^2] } } ``` **特点**: - 可获取特定时间分量(时/分/秒等) - 支持日期计算(如加减天数) ### 方法对比总结 | **方法** | **精度** | **线程安全** | **Java版本** | **适用场景** | |--------------------------|----------|--------------|--------------|----------------------------| | `System.currentTimeMillis()` | 毫秒 | 是 | 所有版本 | 高性能时间戳需求 | | `LocalDateTime.now()` | 纳秒 | 是 | Java 8+ | 现代应用(推荐) | | `new Date()` | 毫秒 | 是 | 所有版本 | 简单快速获取 | | `Instant.now()` | 纳秒 | 是 | Java 8+ | 跨时区标准化时间 | | `Calendar.getInstance()` | 毫秒 | 否 | 所有版本 | 需要操作时间分量或日期计算 | ### 最佳实践建议 1. **Java 8+ 项目**:优先使用 `LocalDateTime` 或 `Instant` 2. **性能敏感场景**:使用 `System.currentTimeMillis()` 3. **需要格式化**:配合 `DateTimeFormatter`(Java 8+)或 `SimpleDateFormat` 4. **传统项目**:`Date` 和 `Calendar` 仍可满足基本需求 > 注意:所有时间获取操作都基于系统时钟,修改系统时间会影响输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值