一次開發遇到的問題,調用其他部門的HTTP接口,需要一個13位時間戳的參數,時間工具類寫好,13位時間戳獲取的沒問題,當我把時間設置成2000的某個日期,時間戳變成了12位(原因是總毫秒數沒有達到13位),導致程序報錯,問題找了好久,記錄一下。
時間戳
時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總毫秒數。
代碼
package com.sto.tmsapp.util;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
/**
* LocalDateTime
*/
public class MyDateUtils {
public static DateTimeFormatter formatterOne = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static DateTimeFormatter formatterTwo = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static DateTimeFormatter formatterThree = DateTimeFormatter.ofPattern("HH:mm:ss");
public static DateTimeFormatter formatterFour = DateTimeFormatter.ofPattern("HH");
public static DateTimeFormatter formatterFive = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
public static String getNowDayTime() {
return LocalDateTime.now().format(formatterOne);
}
public static String getNowTime() {
return LocalDate.now().format(formatterTwo);
}
public static String getDayTimePlusByDay() {
return LocalDateTime.now().plusDays(1).format(formatterOne);
}
public static String getDayPlusByDay(int day) {
return LocalDate.now().plusDays(day).format(formatterTwo);
}
public static String getPersonDayTime(String actualDepartureTime) {
LocalDateTime dayTime = LocalDateTime.parse(actualDepartureTime, formatterOne);
int hour = Integer.parseInt(dayTime.format(formatterFour));
if (hour < 12) {
return dayTime.plusDays(-1).format(formatterTwo);
}
return dayTime.format(formatterTwo);
}
public static String getNowDatePlusHours(int hours) {
return LocalDateTime.now().plusHours(hours).format(formatterOne);
}
public static long getModifiedOn(String modifiedOn) {
return LocalDateTime.parse(modifiedOn, formatterFive).toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
public static void main(String[] args) {
String time = "2008-03-28 10:00:00.0";
long stamp = MyDateUtils.getModifiedOn(time);
// 13位時間戳,沒問題
System.out.println(String.valueOf(stamp).length());
String time2 = "2000-03-28 10:00:00.0";
long stamp2 = MyDateUtils.getModifiedOn(time2);
// 12位時間戳
System.out.println(String.valueOf(stamp2).length());
}
}