为什么 Stream 在设置时间戳的时候去掉了时区码?
Why does Stream remove the time zone code when setting a timestamp?
我观察到,如果您创建一个 activity 带有这样的时间戳:
2010-09-17T14:27:37.860Z
会这样存储:
2010-09-17T14:27:37.860
注意缺少的时区代码。据我所知,这违反了 ISO 标准,并且它肯定会在 JavaScript 中对 Date 对象产生并发症。我总是不得不通过添加 Z 字符将时间戳映射回正确的时间戳,这有点疯狂。
下面是一些代码,希望能说明为什么会出现这个问题:
const now = new Date('2010-09-17T14:27:37.860Z');
const notNow = new Date('2010-09-17T14:27:37.860');
console.log(now);
// Fri Sep 17 2010 09:27:37 GMT-0500 (Central Daylight Time)
console.log(notNow);
// Fri Sep 17 2010 14:27:37 GMT-0500 (Central Daylight Time)
这是怎么回事?我是不是误解了什么或者这是 Stream 的错误?
你是对的; activity.time
字段返回时没有偏移信息,即使它们被本地化为 UTC。
这是早期引入的问题,如果不破坏依赖此时间格式的现有 API 客户端数量,则无法修复。
流的 API 将 activity.time
存储为 UTC(将遵守用户输入中指定的偏移量)。如果你使用 moment.js 你可以像这样正确解析时间字符串
moment.tz("2010-09-17T14:27:37.860", "UTC")
我观察到,如果您创建一个 activity 带有这样的时间戳:
2010-09-17T14:27:37.860Z
会这样存储:
2010-09-17T14:27:37.860
注意缺少的时区代码。据我所知,这违反了 ISO 标准,并且它肯定会在 JavaScript 中对 Date 对象产生并发症。我总是不得不通过添加 Z 字符将时间戳映射回正确的时间戳,这有点疯狂。
下面是一些代码,希望能说明为什么会出现这个问题:
const now = new Date('2010-09-17T14:27:37.860Z');
const notNow = new Date('2010-09-17T14:27:37.860');
console.log(now);
// Fri Sep 17 2010 09:27:37 GMT-0500 (Central Daylight Time)
console.log(notNow);
// Fri Sep 17 2010 14:27:37 GMT-0500 (Central Daylight Time)
这是怎么回事?我是不是误解了什么或者这是 Stream 的错误?
你是对的; activity.time
字段返回时没有偏移信息,即使它们被本地化为 UTC。
这是早期引入的问题,如果不破坏依赖此时间格式的现有 API 客户端数量,则无法修复。
流的 API 将 activity.time
存储为 UTC(将遵守用户输入中指定的偏移量)。如果你使用 moment.js 你可以像这样正确解析时间字符串
moment.tz("2010-09-17T14:27:37.860", "UTC")