首页 > 解决方案 > 谷歌脚本的简单时区问题

问题描述

我是新手,但我正在使用“食谱”程序,它将其数据放入 Google 表格。一切正常,但我有两个问题:

var datenow = Utilities.formatDate(new Date(), "EDT", "yyyy-MM-dd'T'hh:mm a'Z'").slice(0,10); 

var timenow = Utilities.formatDate(new Date(), "America/NewYork", "yyyy-MM-dd'T'hh:mm a'Z'").slice(11,19); 

示例程序使用“PST”表示太平洋标准时区。当我使用它时,我得到一个似乎是 GMT 的结果。我想使用 EDT(东部夏令时)并尝试了各种不同的品种(如上),结果很奇怪。我会误入歧途吗?看起来很简单,但我显然做错了什么!

标签: google-apps-scripttimezone

解决方案


一些东西:

  • 您应该使用"America/New_York"美国东部时间。它将根据适用的情况自动选择 EST 或 EDT。不要使用时区缩写。
    • 对于太平洋时间,您应该使用"America/Los_Angeles". 同样,不要使用 PST 或 PDT。
    • 有关其他选项,请参阅TZ 数据库时区列表。
  • 时间戳字符串中的字母TZ具有特定含义:
    • TISO 8601格式的时间分隔符。由于您使用的是带上午/下午指示器的 12 小时制时钟,因此您没有 ISO 8601 时间戳,因此不应在输出中使用该字母。如果您希望字符串符合 ISO 8601 ,请改用空格或切换到 24 小时制 ( vs )。THH:mmhh:mm a
    • Z是 ISO 8601 格式的 UTC 指示符。由于您要求的是特定时区的时间,因此您没有使用 UTC,因此不应Z在输出字符串中使用该字母。z但是,您可以使用、ZX标记包含时区名称或偏移量- 无需将其放在引号中。
      换句话说,您可以使用"yyyy-MM-dd hh:mm a z".
  • 不要slice你的输出字符串。相反,只需按照您希望输出出现的方式提供格式标记。如果您想要单独的datenowtimenow字符串,那么在一种用途"yyyy-MM-dd"和另一种用途中使用"hh:mm a".

推荐阅读