Hue 中通过 Hive metastore 查看表创建信息时,我们发现其中 Overview 和 Details 的时间差总是6个小时,按理北京时间东八区相差8个小时才合理啊,接下来我们跟一下 Hue 中的代码。
从 Overview 中分析 Properties 中的时间 Created 的源码可以发现其使用的是
data-bind="text: localeFormat(details.properties.create_time)"
从 localeFormat
的函数继续跟踪可以发现使用的其实是 moment 库中的 utc 方法,
return moment.utc(mTime).format("L LT");
从以上两段代码来看,Overview 中 Created 的显示时间比 Details 中的北京时间晚8小时才对,但实际却比北京时间提前了6小时!
百思不得其解,后面才发现,这是 JavaScript 对时区处理的坑!!!
Details 中 CreateTime 为 Wed Apr 04 15:41:58 CST 2018
, 其中的 CST 可以是『Central Standard Time 美国中部时间』和『中国标准时间』,而美国中部时间是西六区… JS 将 CST 作为美国中部时间处理了…