时间戳问题

一次开发遇到的问题,调用其他部门的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());
    }
}

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