前端如何将CST时间转换为GMT时间

475 阅读2分钟

页面需要展示文章发布时间,然而后端返回的时间格式为:Fri Oct 20 17:23:06 CST 2023, 使用js Date对象toLocaleDateString()转化时间发现为:2023/10/24,时间对不上,后研究是时差问题。

GMT(Greenwich Mean Time)代表格林尼治标准时间

而CST却同时可以代表如下 4 个不同的时区: CST:CST可视为中国、美国、澳大利亚或古巴的标准时间。 CST可以为如下4个不同的时区的缩写: 中国标准时间:China Standard Time UT+8:00 美国中部时间:Central Standard Time (USA) UT-6:00 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 古巴标准时间:Cuba Standard Time UT-4:00

问题描述: 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个小时

通过 Java 获取的CST时间用的是China Standard Time,而客户端JavaScript则默认采用的是美国的中部时间

  • 解决办法
publishTime() {
    const oldTime = 'Fri Oct 20 17:23:06 CST 2023'
    const tempTimeArr = oldTime.trim().split(' ')
    const newTime = tempTimeArr[0] + ' ' + tempTimeArr[1] + ' ' + tempTimeArr[2] + ' ' + tempTimeArr[5] + ' ' + tempTimeArr[3] + ' ' + 'GMT+0800'
    const time = new Date(newTime)
    return `${time.getFullYear()}-${(time.getMonth() + 1).toString().padStart(2, '0')}-${time.getDate().toString().padStart(2, '0')} ${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`
}