【问题标题】:Google app script reading different timezones from Spreadsheet谷歌应用脚​​本从电子表格中读取不同的时区
【发布时间】:2021-03-21 02:56:53
【问题描述】:

我有一个 Google App 脚本,它从电子表格中读取包含两个日期的一行。

这两个日期是用不同的时区读取的,我不明白为什么。

单元格内容为:

25/12/1941  16/02/2021

读取日期

  var dataRng = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Elenco').getRange("G"+rowElenco+":AC"+rowElenco);
  var dati = dataRng.getValues();

第一个日期读作

Thu Dec 25 1941 00:00:00 GMT+0200 (Central European Standard Time)

第二个日期是

Tue Feb 16 2021 00:00:00 GMT+0100 (Central European Standard Time)

为什么第一个日期是 GMT+"?

我(认为我)已经正确设置了电子表格和脚本时区:

  Logger.log(Session.getScriptTimeZone()); 
  Logger.log(SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone());

输出:

03:49:18    Informazioni    Europe/Rome
03:49:18    Informazioni    Europe/Rome

这会导致问题,因为我尝试格式化日期和

var dtNascita = Utilities.formatDate(dati[0][11], "GMT+1", "dd/MM/yy");

变成

dtNascita: "24/12/41"

我错过了什么?

【问题讨论】:

  • 可能是历史性的时区偏移问题。大约在 1940 年代初期,许多欧洲国家改变了他们的偏移量,以有效地全年实行夏令时。例如。英国有双重夏令时(+2)。见Browsers, time zones, Chrome 67 Error (historic timezone changes)
  • 例如new Date(Date.UTC(1941,0)).toLocaleString('en-GB',{timeZone:'Europe/Rome', timeZoneName:'short'}) 给出“01/01/1941, 2:00:00 GMT+2”,而 2021 年的同一日期给出“01/01/2021, 1:00:00 CET”(即 GMT +1)。

标签: javascript date google-apps-script google-sheets timezone


【解决方案1】:

您必须在转换日期格式时设置时区,以便始终考虑相同的值:

var ss = SpreadsheetApp.getActiveSpreadsheet();
Utilities.formatDate(dati[0][11], ss.getSpreadsheetTimeZone(), "dd/MM/yy");

https://www.analyticstraps.com/utc-vs-gmt-vs-getspreadsheettimezone/

【讨论】:

  • 虽然我不完全明白为什么......它就像一个魅力。也适用于“欧洲/罗马”而不是“GMT+1”。感恩!
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
相关资源
最近更新 更多