关于js new Date()是GMT本地时间 转换CST格林威治 的操作

问题描述
js接收java后台的时间数据时,时间格式的CST时间(北京时间,China Standard Time,UTC+8:00),而js默认的是GMT时间格式,js new出来的时间对象会比java传来的数据多了14个小时。
原因:
new Date(CST)。new Date通过解析currentDateStr返回一个long类型的时间差(UTC时间)来构造日期对象,但这个解析的过程中,如果遇到CST,会被认为是指北美的时区,比格林威治时间(GMT)晚6个小时,按照转换关系,转成UTC需要加6个小时。而在输出receivedCurrentDate的时候会调用toString方法,会根据所在的时区格式化输出日期,也就是将UTC转成China Standard Time,需要加8个小时,所以就出现了相差14个小时

拓展:
UTC:
世界协调时(Coordinated Universal Time,简称UTC)又称世界标准时间或世界协调时间,是最主要的世界时间标准,在时刻上尽量接近于格林尼治标准时间。对于大多数用途来说,UTC时间被认为能与GMT时间互换,基本相等,但GMT时间已不再被科学界所确定
GMT:
格林尼治标准时间(Greenwich Mean Time,简称GMT)指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,格林尼治时间基于天文观测本身的缺陷,已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)来决定。
CST:

CST代表了4个不同的时间,每个时间和UTC之间的转换关系如下:

中部标准时区(北美洲),Central Standard Time,UT-6:00

澳洲中部时间,Central Standard Time,UT+9:30

北京时间,China Standard Time,UT+8:00

古巴标准时间,Cuba Standard Time,UT-4:00

function formatDateForYearAndMonthAndDay(time){
    if (time == '' || time == null || time == undefined) return '';
    var dateStr = time.split(" ");
    var strGMT = dateStr[0]+" "+dateStr[1]+" "+dateStr[2]+" "+dateStr[5]+" "+dateStr[3]+" GMT+0800";
    var dateData = new Date(Date.parse(strGMT));
    var datetime = new Date();
    datetime.setTime(dateData);
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
    var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
    // var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
    // var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
    return year + "-" + month + "-" + date;
}

在网上找到了 的这种方法 不能实现想要的目的     还是会产生14小时的时间差:

猜你喜欢

转载自blog.csdn.net/weixin_41825468/article/details/81872871
今日推荐