在 JDK 8 之前,Java 语言为我们提供了两个类用于操作时间,它们分别是:java.util.Date 和 java.util.Calendar,
但在 JDK 8 的时候为了解决旧时间操作类的一些缺陷,提供了几个新的类,用于操作时间和人气,
它们分别是:LocalTime、LocalDateTime、Instant,都位于 java.time 包下。
时间的操作在我们日常的开发中经常见到,比如,业务数据都要记录创建时间和修改时间,并要把这些时间格式化之后显示到前端页面,再比如我们需要计算业务数据的时间间隔等,都离不开对时间的操作。
时间戳:时间戳是指格林威治时间 1970-01-01 00:00:00(北京时间 1970-01-01 08:00:00)起至现在的总秒数。
二、获取时间
| 类 | 获取时间 | 说明 | 使用频率 |
| java.util.Date | new Date() | Date对象 | 少用 |
| System | System.currentTimeMillis() | 时间戳 | 常用 |
| java.util.Calendar | Calendar.getInstance().getTime() | Date升级版 | 较常用 |
| java.time.LocalDate | LocalDate.now() | 只有日期 | 推荐 (JDK1.8新API) |
| java.time.LocalTime | LocalTime.now() | 只有时间 | 推荐 (JDK1.8新API) |
| java.time.LocalDateTime | LocalDateTime.now() | 日期时间 | 推荐 (JDK1.8新API) |
| java.time.ZonedDateTime | ZonedDateTime.now() | 有时区 | 推荐 (JDK1.8新API) |
| Instant | Instant.now() | 时刻 | 推荐 (JDK1.8新API) |
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Calendar;
import java.util.Date;
public class CurrentTime {
public static void main(String[] args) {
//getByDate();
//getBySystem();
//getByCalendar();
//getByLocalDate();
//getByLocalTime();
//getByLocalDateTime();
//getByZonedDateTime();
//getByInstant();
}
// 使用java.util.Date类
public static void getByDate(){
Date date = new Date();
//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//System.out.println(format.format(date));
System.out.println(date);
}
// 使用System类
public static void getBySystem(){
long l = System.currentTimeMillis();
Date date = new Date(l);
System.out.println(date);
}
// 使用Calendar类
public static void getByCalendar(){
Date time = Calendar.getInstance().getTime();
System.out.println(time);
}
// 使用LocalDate类:只有日期,无时间
public static void getByLocalDate(){
LocalDate now = LocalDate.now();
System.out.println(now);
}
// 使用LocalTime类:只有时间,无日期
public static void getByLocalTime(){
LocalTime now = LocalTime.now();
System.out.println(now);
}
// 使用LocalDateTime类
public static void getByLocalDateTime(){
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
}
// 使用ZonedDateTime类
public static void getByZonedDateTime(){
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now);
}
// 使用Instant类
public static void getByInstant(){
Instant now = Instant.now();
System.out.println(now);
}
}
三、格式化时间 1、JDK8之前的操作
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sf.format(new Date())); // output:2022-08-06 21:46:22
SimpleDateFormat 构造参数的含义,请参考以下表格信息:
| 字符 | 含义 | 示例 |
| y | 年 | yyyy-1996 |
| M | 月 | MM-07 |
| d | 月中的天数 | dd-02 |
| D | 年中的天数 | 121 |
| E | 星期几 | 星期四 |
| H | 小时数(0-23) | HH-23 |
| h | 小时数(0-12) | hh-11 |
| m | 分钟数 | mm-02 |
| s | 秒数 | ss-03 |
| Z | 时区 | +0800 |
使用示例:
- 获取星期几:new SimpleDateFormat("E").format(new Date())
- 获取当前时区:new SimpleDateFormat("Z").format(new Date*())
// 时间格式化①
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timeFormat = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(timeFormat); // output:2019-08-16 21:15:43
// 时间格式化②
String timeFormat2 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(timeFormat2); // output:2019-08-16 21:17:48



