【问题标题】:AWS Lambda TimezoneAWS Lambda 时区
【发布时间】:2019-08-18 10:15:28
【问题描述】:

我已经搜索了一段时间,但找不到关于该文档或来自 AWS 的任何官方文档的明确答案。

我有一个 Lambda 函数,我需要根据我的时区获取当前日期,但我不确定我可以依靠哪些前提来做到这一点,因为这是一个关键应用程序,我不能简单地依靠单一的测试或经验结果。

我希望 lambda 函数遵循它们所在的 AWS 区域的时区或任何 GMT 0 的唯一时区,但无法在任何地方确认。

谁能澄清这是如何工作的,如果可能的话,还可以指出任何官方文档吗?另外,与夏令时有关的任何特殊问题?

我的 Lambda 函数是在 NodeJS 上编写的,我一直在本地(在我的机器上)使用new Date() 检索当前日期时间。

【问题讨论】:

  • JavaScript Date 对象代表一个特定的时间点。时间不受时区影响,日期对象也不受影响。 new Date 总是正确的。直到您将其转换为确实(或可以)包含时区信息(如字符串)的格式,它可能会变得不正确。
  • @Paulpro 明白了。谢谢!
  • FWIW,Lambda环境中的系统时区is documented as UTC, and the clocks are kept in sync with NTP
  • 对于任何相关人员,截至 2019 年 12 月,此信息可在“环境变量”部分下找到:“环境的时区 (UTC)。执行环境使用 NTP 同步系统时钟。”

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

使用日期对象的Lambda时间将return a date in UTC unix time

TZ – 环境的时区 (UTC)。

要获取特定时区的时间,您可以使用moment-timezone

使用Javascript Date().now():

var moment = require("moment-timezone");
moment(Date().now()).tz("America/Los_Angeles").format("DD-MM-YYYY");

或使用 new Date():

var moment = require("moment-timezone");
var date = new Date();
moment(date.getTime()).tz("America/Los_Angeles").format("DD-MM-YYYY");

你可以change the moment .js format to whatever you require

关于夏令时,可以使用isDST() method 检测。

【讨论】:

  • 感谢您的回答!关于“使用日期对象的 Lambda 时间将返回 UTC unix 时间的日期。”您能否指出任何有关此的 AWS 文档。此解决方案是否会自动更新日、月、年等(如果从 um tz 转换为其他需要)?另外,夏令时会被正确处理吗?
  • 感谢您的编辑!我打算添加它,但它溜走了我的想法
  • 不用担心。很高兴您的回答和其他用户的 cmets 我们可以解决问题并提供高质量的答案。再次感谢!
  • 有没有办法在没有库的情况下做到这一点?老实说,这没有任何意义 ICT 区域中的 lambda 应该返回 ICT 时间。顺便说一句,您的第一个链接不起作用
  • 我刚刚检查过,链接仍然有效(它指向docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)。但是,使用 UTC 时间确实有意义,因为如果您以一个可以跨越多个时区的 AWS 区域为例,它不应该根据其产生的位置而改变。这就是他们使用通用时间格式的原因(UTC 在所有软件中也用于毫秒时间)。话虽如此,如果您知道要偏移多少小时(stackoverflow.com/a/1050782/7207514),则可以在没有库的情况下更改时间戳。一个库只是让你更好地处理它,因为它考虑了边缘情况
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2022-01-21
  • 2016-05-02
  • 2020-11-12
  • 2020-09-26
  • 2018-06-23
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多