时间戳问题总结

2 篇文章 0 订阅
1 篇文章 0 订阅

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值