Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
- 本地日期和时间:LocalDateTime,LocalDate,LocalTime;
- 带时区的日期和时间:ZonedDateTime;
- 时刻:Instant;
- 时区:ZoneId,ZoneOffset;
- 时间间隔:Duration;
- 取代SimpleDateFormat的格式化类型:DateTimeFormatter。
新API的类型几乎全部是不变类型(和String类似)
1. 获取当前时间
@Test
public void localDateTime() {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.getYear() + "-" +
localDateTime.getMonthValue() + "-" +
localDateTime.getDayOfMonth() + " " +
localDateTime.getHour() + ":" +
localDateTime.getMinute() + ":" +
localDateTime.getSecond());
}
2. 初始化时间
@Test
public void localDateAndLocalTime(){
LocalDate localDate = LocalDate.of(2020, 1, 20);
LocalTime localTime = LocalTime.of(11, 22, 33);
LocalDateTime localDateTime = LocalDateTime.of(localDate,localTime);
System.out.println(localDateTime);
}
3. 字符串和LocalDateTime互转
@Test
public void string2LocalDateTime(){
String str = "2020-02-18 16:59:11";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime1 = LocalDateTime.parse(str,dateTimeFormatter);
}
@Test
public void localDateTime2String(){
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String str1 = localDateTime.format(dateTimeFormatter);
String str2 = dateTimeFormatter.format(localDateTime);
}
4. 时间戳和LocalDateTime互转,借助Instant
@Test
public void timestamp2LocalDateTime(){
long timestamp = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
@Test
public void localDateTime2Timestamp(){
LocalDateTime localDateTime = LocalDateTime.now();
long timestamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
5. Date和LocalDateTime互转
@Test
public void date2LocalDateTime(){
Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
@Test
public void localDateTime2Date(){
LocalDateTime localDateTime = LocalDateTime.now();
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
}
参考:
Java 8 日期时间 API
Java 8时间接口localDateTime和Date的对比
LocalDateTime