這是為了個人的友善,也同時為了大家能更好地了解與使用擷取時間的各種方法。
import org.springframework.util.Assert;
import java.time.Clock;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @Author: JCccc
* @CreateTime: 2018-09-11
* @Description:
* 2018-12-04 1.使用DateTimeFormatter替換了部分SimpleDateFormat, 因為線程安全問題。
* 2.後期這個工具類應該需要優化,因為有Instant,這個專門擷取時間戳的類
* 2018-12-12 将SimpleDateFormat相關的方法全部去除替換
*/
public class TimeConversionUtil {
//傳入long時間戳 ,轉換成格式化的String類型時間
public String TimeOfLongToStr(long time) {
Assert.notNull(time, "time is null");
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()));
}
//傳入String類型格式化時間,轉換成Long類型的時間戳
public long TimeOfStrToLong(String strTime){
Assert.notNull(strTime, "time is null");
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse(strTime, ftf);
return LocalDateTime.from(parse).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
//通過LocalDateTime擷取目前格式化時間
public static String getTimeStrNow(){
//DateTimeFormatter替換了SimpleDateFormat, 因為線程安全問題。
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
//通過LocalDateTime擷取目前格式化時間
public static String getTimeStrNow1(){
//DateTimeFormatter替換了SimpleDateFormat, 因為線程安全問題。
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
//擷取目前時間戳方法一
public long getTimeLongOfClock(){
return Clock.systemDefaultZone().millis();
}
//擷取目前時間戳方法二
public long getTimeLongOfCalendar(){
Calendar calendar = Calendar.getInstance();
return calendar.getTimeInMillis();
}
//擷取目前時間戳方法三
public long getTimeLongOfSystem(){
return System.currentTimeMillis();
}
//擷取目前時間戳方法四
public long getTimeLongOfDate(){
Date date = new Date();
return date.getTime();
}
//擷取目前時間戳五
public long getTimeLongOfInstant(){
Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
// System.out.println("秒數:"+now.getEpochSecond());
// System.out.println("毫秒數:"+now.toEpochMilli());
return now.toEpochMilli();
}
//擷取兩天之間相差多少天
public static String getTransTime(String timeStr) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-M-dd HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(timeStr, df);
DateTimeFormatter f2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String transTime = f2.format(date);
return transTime;
}
工具類調試
// public static void main(String[] args) {
TimeConversionUtil timeConversionUtil=new TimeConversionUtil();
System.out.println(timeConversionUtil.getTimeLongOfCalendar());
System.out.println(timeConversionUtil.getTimeLongOfDate());
System.out.println(timeConversionUtil.getTimeLongOfInstant());
System.out.println(timeConversionUtil.TimeOfLongToStr(timeConversionUtil.getTimeLongOfDate()));
System.out.println(TimeConversionUtil.getTimeStrNow());
// String a=null;
// Assert.notNull(a,"a是空的");
//
// }
}