Google Apps脚本格式日期使用用户的时区而非GMT

Emp*_*yee 12 javascript time timezone google-apps-script timezone-offset

我有一行设置单元格中的当前日期和时间:

sheet.getRange(1,1).setValue(new Date());
Run Code Online (Sandbox Code Playgroud)

然后我有一行根据该单元格的值创建格式化日期:

var addedDate = sheet.getRange(1,1).getValue();
var addedTime = Utilities.formatDate(addedDate, "GMT", "hh:mm a");
Run Code Online (Sandbox Code Playgroud)

结果addTime似乎在GMT时区,我需要它在用户的时区.它通常是美国东部时间(-0500),但如果我只是从那个时间减去5个小时,那么不考虑夏令时(-0400).

我在这里查看了formatDate的文档:https://developers.google.com/apps-script/reference/utilities/utilities#formatDate (Date,String,String )

这里链接到官方的Java SimpleDateFormat类文档:http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

...但我无法在那里找到有效时区列表来替换GMT.

Ser*_*sas 26

您可以直接获取电子表格时区,如下所示:

  var addedDate = sheet.getRange(1,1).getValue();
  var addedTime = Utilities.formatDate(addedDate, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "hh:mm a");
Run Code Online (Sandbox Code Playgroud)

请参阅此处的doc

但如果您想自己选择,Google Apps脚本会使用这些格式:

http://joda-time.sourceforge.net/timezones.html

  • 更新:`Session.getScriptTimeZone()`也适用于我的需求.https://developers.google.com/apps-script/reference/base/session (4认同)
  • @mike:使用`Session.getScriptTimeZone()`的一个潜在问题是,如果您跨时区部署脚本.不同tz中的最终用户最终会将时间戳同步到脚本的tz,而不是电子表格的tz. (4认同)