時間戳問題

一次開發遇到的問題,調用其他部門的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());
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章