时间戳问题
一次开发遇到的问题,调用其他部门的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());
}
}
还没有评论,来说两句吧...