我遇到了一个难题,即后端数据始终以UTC时间存储。我们的前端数据始终以CST表示。我无法进入这个“黑匣子”。
我想将其镜像到我们的数据仓库中。总部设在欧洲(CET)。因此,“本地”转换将不起作用。
我想知道最简单、最直接的方法来准确地将UTC时间转换为中央标准时间(我可以将其转换为纪元毫秒或日期格式'2015-01-01 00:00:00')。(根据夏令时的情况,延迟5或6个小时)。
我看到很多关于转换为“本地”时间的帖子……再说一次,我不想这样,我也不想简单地减去6个小时,这将是错误的半年。
有谁有什么想法吗?这似乎是一个非常常见的问题,但我已经搜索了一段时间,但什么也没有找到。
发布于 2015-12-19 05:36:12
在moment-timezone附加组件中使用moment.js可以简化此任务。
// construct a moment object with UTC-based input
var m = moment.utc('2015-01-01 00:00:00');
// convert using the TZDB identifier for US Central time
m.tz('America/Chicago');
// format output however you desire
var s = m.format("YYYY-MM-DD HH:mm:ss");
此外,由于您指的是整个北美中部时区,因此您应该说“中部时间”或"CT“。适用于北美的缩写"CST“明确表示UTC-6,而"CDT”缩写将在夏令时用于UTC-5。
不过,使用缩写时一定要小心。"CST“可能意味着”中国标准时间“。(它实际上有five different interpretations)。
发布于 2015-12-19 02:55:36
您可以使用时区偏移量来确定应该减去5小时还是6小时。
var dateJan;
var dateJul;
var timezoneOffset;
var divUTC;
var divCST;
// Set initial date value
dateValue = new Date('10/31/2015 7:29:54 PM');
divUTC = document.getElementById('UTC_Time');
divCST = document.getElementById('CST_Time');
divUTC.innerHTML = 'from UTC = ' + dateValue.toString();
// Get dates for January and July
dateJan = new Date(dateValue.getFullYear(), 0, 1);
dateJul = new Date(dateValue.getFullYear(), 6, 1);
// Get timezone offset
timezoneOffset = Math.max(dateJan.getTimezoneOffset(), dateJul.getTimezoneOffset());
// Check if daylight savings
if (dateValue.getTimezoneOffset() < timezoneOffset) {
// Adjust date by 5 hours
dateValue = new Date(dateValue.getTime() - ((1 * 60 * 60 * 1000) * 5));
}
else {
// Adjust date by 6 hours
dateValue = new Date(dateValue.getTime() - ((1 * 60 * 60 * 1000) * 6));
}
divCST.innerHTML = 'to CST = ' + dateValue.toString();
<div id="UTC_Time"></div>
<br/>
<div id="CST_Time"></div>
发布于 2018-07-05 03:35:02
您可以使用下面的代码片段进行转换。
function convertUTCtoCDT() {
var timelagging = 6; // 5 or 6
var utc = new Date();
var cdt = new Date(utc.getTime()-((1 * 60 * 60 * 1000) * timelagging));
console.log("CDT: "+cdt);
}
https://stackoverflow.com/questions/34361866
复制相似问题