Java8时间处理方式
package com.example.demo.timeuser;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author pda
* @date 2019-11-24
*/
public class timeuser {
/**
* instant
*/
private static Instant instant = Instant.now();
/**
* time
*/
private static LocalTime localTime = LocalTime.now();
/**
* date
*/
private static LocalDate localDate = LocalDate.now();
/**
* date and time
*/
private static LocalDateTime localDateTime = LocalDateTime.now();
/**
* using instant
*/
private static void usingInstant(){
// Instant是UTC计算,理应加8
Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println(now);
// Instant获取秒数
System.out.println(now.getEpochSecond());
// Instant获取毫秒数
System.out.println(now.toEpochMilli());
// 毫秒转Instant类
Instant instant = Instant.ofEpochMilli(now.toEpochMilli());
System.out.println(instant);
// date 转 Instant
Instant date = new Date().toInstant();
}
/**
* using localTime
*/
private static void usingLocalTime(){
// 当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
// 获取当前时间
System.out.println(localTime.getHour()+ ":" + localTime.getMinute() + ":" + localTime.getSecond());
// 获取一小时前,分钟,秒同理,加减同理
System.out.println(localTime.plusHours(1).minusHours(2));
// 格式化日期
System.out.println(localTime.format(DateTimeFormatter.ofPattern("HH:mm:ss")));
}
/**
* using LocalDate
*/
private static void usingLocalDate(){
// 输出日期
System.out.println(localDate);
// 获取年月日
System.out.println(localDate.getYear() + "-" + localDate.getMonth().getValue() + "-" + localDate.getDayOfMonth());
// 格式化日期
System.out.println(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
// 加减日期
System.out.println(localDate.minusDays(50));
}
/**
* using LocalDateTime
*/
private static void usingLocalDateTime(){
// 时间
System.out.println(localDateTime);
// 格式化
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// Instant 转 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneOffset.systemDefault());
}
public static void main(String[] args){
//usingInstant();
//usingLocalTime();
//usingLocalDate();
//usingLocalDateTime();
}
}
使用SimpleDateFormat是线程不安全的,如果每次都需要new出一个,会造成不必要的浪费。即便使用ThreadLocal的变量也还是不够优化的处理。实际上还有DateUtils等各个第三方的工具可以进行处理,但是Java8已经给出了最合理的解决方式,而且还有更多合理的API可以使用。数据库的timestamp对应着LocalDateTime类配合着使用。