JAVA8 是Java比较大的版本升级,新增了许多新的特性。如:Lambda、Stream API、DateTime API、Optional等等。
本文主要讲解一下最新的DateTime类的用法。
在这之前我们通常使用Date 和 SimpleDateFormat类来获取日期和格式化日期。Date在新的Java版本中只保留了获取getTime(获取毫秒时间戳)和比较时间的方法,其他均已过时淘汰,SimpleDateFormat则是因为线程不安全,多线程中使用需要在没个线程中创建独立的实例,从Java8以后可以不使用这两个类了。
Date date = new Date();
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为: " + f.format(date));
Java8 新增的日期时间API,Date有的LocalDateTime全有
Class | Description |
---|---|
LocalDate | 年, 月, 日 (yyyy-MM-dd) |
LocalTime | 时, 分, 秒 ,毫秒 (HH-mm-ss-ns) |
LocalDateTime | yyyy-MM-dd-HH-mm-ss-ns |
DateTimeFormatter | 格式化日期和时间 |
public static void main(String[] args) {
System.out.print("Unix Timestamp:\t");
System.out.println(Instant.now().getEpochSecond());
System.out.print("Unix Timestamp 毫秒:\t");
System.out.println(Instant.now().toEpochMilli());
//System.currentTimeMillis() 返回Unixtimestamp 毫秒
System.out.print("System.currentTimeMillis() 秒 / 毫秒:\t");
System.out.print(System.currentTimeMillis()/1000);
System.out.print("\t");
System.out.println(System.currentTimeMillis());
System.out.print("LocalDateTime \t");
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.print("LocalDate \t");
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
//格式化日期时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");
String dateTime = formatter.format(LocalDateTime.now());
System.out.println(dateTime);
System.out.print("LocalTime \t");
System.out.println(LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
System.out.println("字符转LocalTime");
System.out.println(LocalTime.parse("19:03"));
System.out.println("字符转LocalDateTime");
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(LocalDateTime.parse("2022-03-22 19:03",format));
//获取当前时区
System.out.println(ZoneId.systemDefault());
System.out.println(ZoneId.of("GMT+00:00"));
//根据时区获取时间
ZoneId gmt = ZoneId.of("GMT+00:00");
System.out.println(LocalDateTime.now(gmt));
System.out.println(LocalDate.now(gmt));
System.out.println(ZonedDateTime.now(gmt));
//根据时区获取ZoneId
TimeZone timeZoneUsPacific = TimeZone.getTimeZone("US/Pacific");
ZoneId zoneIdUsPacific = timeZoneUsPacific.toZoneId();
System.out.println("ZoneId = " + zoneIdUsPacific);
System.out.println(LocalDateTime.now(zoneIdUsPacific));
ZoneId id = ZoneId.of("Europe/Paris");
System.out.println("ZoneId: " + id);
System.out.println(LocalDateTime.now(id));
}