時間戳問題總結

最近遇到個問題,後端傳入的timestamp(3)的ms級別的時間戳傳到前端的時候總是轉換爲date,可能是公司前端框架底層把這個類型的數據包裝成了date形式的,但是客戶要求ms級別的,需要想辦法把後幾位加載進來。所以就在後端的list裏面增加了參數,單獨存儲ms後面的參數。

總結一下前後端一些時間戳的問題。

前端:long轉換爲yyyy-MM-dd hh-mm-ss形式:

_datetimeFormat: function (date) {
var year = date.getFullYear();
var month = date.getMonth() + 1;//getMonth獲取的是0-11月
var day = date.getDate();
var hour = date.getHours();
var minutes = date.getMinutes();
var second = date.getSeconds();
if (month < 10) {
   month = "0" + month;
}
if (day < 10) {
   day = "0" + day;
}
if (hour < 10) {
   hour = "0" + hour;
}
if (minutes < 10) {
   minutes = "0" + minutes;
}
if (second < 10) {
   second = "0" + second;
}
   return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + second
}

前端:date數據轉換爲long,然後加上8個小時的毫秒級時間(不知道爲什麼timestamp轉換後變成了0時區的時間)

var time1 = new Date(result.content[i].createDate).getTime();
time1 += 8 * 60 * 60 * 1000;
var date1 = new Date(time1);
result.content[i].createDate = this._datetimeFormat(date1);

前端:拼裝createDate

result.content[i].createDate += "." + result.content[i].createDateMs;

後端:String轉date

public static String stringToDate(String str){
      long time = Long.parseLong(str);
      Date date = new Date(time);
      SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
      return simpleDateFormat.format(date);
}

後端:獲取當前時間的String,jdk8

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
 ZonedDateTime zdt=ZonedDateTime.now();
 String dateTime=formatter.format(zdt);

後端:獲取timestamp,其中System.currentTimeMillis()數據類型爲long

Timestamp timestamp=new Timestamp(System.currentTimeMillis());

關於Java的24小時制和12小時制
格式裏的時如果用hh表示用12小時制,HH表示用24小時制。

例如:

yyyy-MM-dd hh:mm:ss 12小時
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //小寫是12小時

yyy-MM-dd HH:MM:ss  24小時
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//大寫是24小時的

 

補充:前端date轉換爲long的方法我在調整兼容性的時候發現ie和Safari(我用的Windows Safari官方提供的最後一個版本)都無法通過上述的gettime方法。可通過如下方法進行改造,Safari和chrom都可以。

var time2 =Date.parse(result.content[i].recordTime.replace(/-/g, "/"));
time2 += 8 * 60 * 60 * 1000;
var date2 = new Date(time2);

 

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