最近遇到个问题,后端传入的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);