时间戳问题

雨点打透心脏的1/2处 2023-07-18 14:06 10阅读 0赞

一次开发遇到的问题,调用其他部门的HTTP接口,需要一个13位时间戳的参数,时间工具类写好,13位时间戳获取的没问题,当我把时间设置成2000年的某个日期,时间戳变成了12位(原因是总毫秒数没有达到13位),导致程序报错,问题找了好久,记录一下。

时间戳

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数

代码

  1. package com.sto.tmsapp.util;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.ZoneOffset;
  5. import java.time.format.DateTimeFormatter;
  6. /** * LocalDateTime */
  7. public class MyDateUtils {
  8. public static DateTimeFormatter formatterOne = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  9. public static DateTimeFormatter formatterTwo = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  10. public static DateTimeFormatter formatterThree = DateTimeFormatter.ofPattern("HH:mm:ss");
  11. public static DateTimeFormatter formatterFour = DateTimeFormatter.ofPattern("HH");
  12. public static DateTimeFormatter formatterFive = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
  13. public static String getNowDayTime() {
  14. return LocalDateTime.now().format(formatterOne);
  15. }
  16. public static String getNowTime() {
  17. return LocalDate.now().format(formatterTwo);
  18. }
  19. public static String getDayTimePlusByDay() {
  20. return LocalDateTime.now().plusDays(1).format(formatterOne);
  21. }
  22. public static String getDayPlusByDay(int day) {
  23. return LocalDate.now().plusDays(day).format(formatterTwo);
  24. }
  25. public static String getPersonDayTime(String actualDepartureTime) {
  26. LocalDateTime dayTime = LocalDateTime.parse(actualDepartureTime, formatterOne);
  27. int hour = Integer.parseInt(dayTime.format(formatterFour));
  28. if (hour < 12) {
  29. return dayTime.plusDays(-1).format(formatterTwo);
  30. }
  31. return dayTime.format(formatterTwo);
  32. }
  33. public static String getNowDatePlusHours(int hours) {
  34. return LocalDateTime.now().plusHours(hours).format(formatterOne);
  35. }
  36. public static long getModifiedOn(String modifiedOn) {
  37. return LocalDateTime.parse(modifiedOn, formatterFive).toInstant(ZoneOffset.of("+8")).toEpochMilli();
  38. }
  39. public static void main(String[] args) {
  40. String time = "2008-03-28 10:00:00.0";
  41. long stamp = MyDateUtils.getModifiedOn(time);
  42. // 13位时间戳,没问题
  43. System.out.println(String.valueOf(stamp).length());
  44. String time2 = "2000-03-28 10:00:00.0";
  45. long stamp2 = MyDateUtils.getModifiedOn(time2);
  46. // 12位时间戳
  47. System.out.println(String.valueOf(stamp2).length());
  48. }
  49. }

发表评论

表情:
评论列表 (有 0 条评论,10人围观)

还没有评论,来说两句吧...

相关阅读

    相关 时间问题

    > 一次开发遇到的问题,调用其他部门的HTTP接口,需要一个13位时间戳的参数,时间工具类写好,13位时间戳获取的没问题,当我把时间设置成2000年的某个日期,时间戳变成了12

    相关 rtmp 时间问题

    花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不吐不快。 事情是这样的,前面跟外地一家公司,开发一个二路RTSP音视频合成一路RTMP音视频的设备。设备在

    相关 fmpeg 时间问题汇总

    大家好    我刚接触流媒体不久, 现在遇到一个非常奇怪的问题,向各位大侠请假,请你们指点。    问题是这样的 用一个 VLC(流媒体客户端) 去请求流媒体服务器上的