google-apps-script - 谷歌脚本的简单时区问题
问题描述
我是新手,但我正在使用“食谱”程序,它将其数据放入 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(东部夏令时)并尝试了各种不同的品种(如上),结果很奇怪。我会误入歧途吗?看起来很简单,但我显然做错了什么!
解决方案
一些东西:
- 您应该使用
"America/New_York"
美国东部时间。它将根据适用的情况自动选择 EST 或 EDT。不要使用时区缩写。- 对于太平洋时间,您应该使用
"America/Los_Angeles"
. 同样,不要使用 PST 或 PDT。 - 有关其他选项,请参阅TZ 数据库时区列表。
- 对于太平洋时间,您应该使用
- 时间戳字符串中的字母
T
和Z
具有特定含义:T
是ISO 8601格式的时间分隔符。由于您使用的是带上午/下午指示器的 12 小时制时钟,因此您没有 ISO 8601 时间戳,因此不应在输出中使用该字母。如果您希望字符串符合 ISO 8601 ,请改用空格或切换到 24 小时制 ( vs )。T
HH:mm
hh:mm a
Z
是 ISO 8601 格式的 UTC 指示符。由于您要求的是特定时区的时间,因此您没有使用 UTC,因此不应Z
在输出字符串中使用该字母。z
但是,您可以使用、Z
或X
标记包含时区名称或偏移量- 无需将其放在引号中。
换句话说,您可以使用"yyyy-MM-dd hh:mm a z"
.
- 不要
slice
你的输出字符串。相反,只需按照您希望输出出现的方式提供格式标记。如果您想要单独的datenow
和timenow
字符串,那么在一种用途"yyyy-MM-dd"
和另一种用途中使用"hh:mm a"
.
推荐阅读
- lisp - 仅更改数组 Clisp 上的一个位置
- flutter - 在网络上颤振 P2P 通信
- javascript - 如何使用赛普拉斯验证状态更改
- reactjs - React Styleguidist - Web 组件未加载到 index.html
- c - 在声明/编译时带有参数的 C 函数指针
- extjs - extjs 绑定公式
- android - 在 RecyclerView 中将文本换行到下一行
- ansible - 在 Ansible 中使用来自 CDH 的 Hadoop
- python - 如何在python中正确解码窗口路径
- angular - Angular 9:同一组件上的解析器和服务