Alexa日历:亚马逊Lambda本地与UTC时区不匹配

Sha*_*ron 1 amazon-web-services alexa node.js aws-lambda

我经历了构建Alexa技能的练习,以便从日历中阅读本地事件.这一切都很好,除了每当美国东部时间晚上7点或之后的事件开始时,技能会在第二天将其读出.

这似乎是一个时区问题.我在Amazon Lambda上托管逻辑,我认为它设置为UTC.将我的Google日历设置为UTC无济于事.添加process.env.TZ = 'America/New_York'到我的JavaScript node.js代码也无济于事.

我被告知,出于隐私原因,我无法发现Alexa用户的时区.但我不需要发现技能用户的时区,因为这是一个安全的假设,他们都与我的本地事件日历,东部日光在同一时区.我需要做的就是让lambda知道第二天晚上7点到当地时间午夜之间的事件不会发生.任何想法我能做什么?谢谢.

Mic*_*bot 6

UTC是过去和未来以及现在唯一明确和确定的时区.

这是唯一的时区,例如,无论地方或国家政府行动的行为如何,01:59:59之后一秒钟的时间将永远不会在 03:00:00.另一方面,美国/东方在春季每年都会遇到这种情况.相反,在秋天的一天,有两次挂钟时间02:59:59在一天内发生两次,相隔一小时.但在UTC中,这两次正确地由两个相隔3600秒的不同值表示,其中一个在一小时后发生.

在设计处理日期时间的应用程序时,几乎没有理由争论正确的解决方案是将日期时间存储为UTC,然后使用时区库来转换它们.转换为UTC是确保无损转换的唯一方法.

Google日历遵循此最佳做法 ,不会将您的活动存储在当地时区,而是将所有事件转换并存储为UTC,然后再次转换并根据您日历的时区偏好显示它们.

如果(?)可以安全地假设用户想要听取基于America/New_York的事件,那么使用时区库来转换系统的日期/时间(任何服务器都应该将其"本地"时区设置为UTC,这是Lambda的情况)以及在进行比较之前从UTC到目标时区的事件日期/时间.

据推测,还可以根据您的时区偏好查询Google Calendar API,您可以将该值用于转化.或者您可以询问用户.