我遇到了一个挑战,即后端数据始终以UTC时间存储。我们的前端数据始终在CST中显示。我无法访问这个黑框。'
我想在我们的数据仓库中反映这一点。它位于欧洲(CET)。那么"本地"转换不起作用。
我想知道准确转换UTC时间的最简单,最直接的方法(我可以在epoch毫秒或日期格式中使用它' 2015-01-01 00:00:00')到中央标准时间。 (根据夏令时落后5或6小时)。
我看到很多关于转换到本地'时间......再一次,我不想要这个,我也不想简单地减去6个小时,这将是半年的错误。
有人有什么想法吗?这似乎是一个非常普遍的问题,但我一直在寻找,但一无所获。
答案 0 :(得分:5)
将moment.js与moment-timezone加载项一起使用可使此任务变得简单。
// 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");
此外,由于您指的是整个北美中部时区,您应该说“中央时间”和“#34; CT"”。缩写" CST"应用于北美时明确表示UTC-6,而CDT"在夏令时期间,缩写将用于UTC-5。
虽然要小心缩写。 " CST"可能意味着"中国标准时间"。 (它实际上有five different interpretations)。
答案 1 :(得分:1)
您可以使用时区偏移来确定是否应减去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();
&#13;
<div id="UTC_Time"></div>
<br/>
<div id="CST_Time"></div>
&#13;
答案 2 :(得分:0)
您可以使用下面的代码片段进行转换。
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);
}
答案 3 :(得分:0)
let newDate = moment(new Date()).utc().format("YYYY-MM-DD HH:mm:ss").toString()
var m = moment.utc(newDate);
m.tz('America/Chicago');
var cstDate = m.format("YYYY-MM-DD HH:mm:ss");