You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apps Script调用getDateCreated()返回文件创建时间晚1小时问题

问题现象

在Apps Script中调用Google Drive接口的getDateCreated()方法获取文件创建时间,写入Google表格时返回值比实际本地创建时间晚1小时:测试场景下文件实际创建时间为25/06/2022 22:48:39,代码返回值为25/06/2022 23:48:39,本地时区为UTC-5。
复现代码如下:

var folder = DriveApp.getFolderById(myFolderId);

var contents = folder.getFiles();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var var_file;
var var_name;
var var_link;
var var_owner;
var var_time;

while(contents.hasNext()){
  var_file = contents.next();
  var_name = var_file.getName();
  var_link = var_file.getUrl();
  var_owner = var_file.getOwner().getName();
  var_time = var_file.getDateCreated();
  sheet.appendRow([var_name,var_link,var_owner, var_time]);
}
偏差原因

getDateCreated() 返回的Date对象存储的是标准UTC时间戳,本身数值完全准确,1小时偏差完全来自时区配置和夏令时的适配问题:

  • 标注的UTC-5时区在6月属于夏令时生效时段,实际本地时间偏移为UTC-4,比冬令时标准时间快1小时。
  • 如果Google表格、Apps Script项目的时区配置选了固定偏移的UTC-5,而非带自动夏令时适配的地区时区,写入Date对象时就会固定按UTC-5做时间转换,刚好和夏令时的实际本地时间差1小时,和遇到的现象完全匹配。
修复方案

方案1:全局时区配置对齐(推荐,一劳永逸)

  • 打开目标Google表格,点击顶部菜单栏「文件」-「设置」,在常规设置页的时区选项中,选择对应地区带自动夏令时适配的时区(例如美东地区选择「美国/纽约」,不要选择固定偏移的UTC-5选项),保存设置。
  • 打开关联的Apps Script项目,点击左侧边栏设置按钮(齿轮图标),勾选「显示appsscript.json清单文件」选项,回到编辑器打开appsscript.json文件,将timeZone字段值修改为和表格完全一致的地区时区ID,示例配置:
{
  "timeZone": "America/New_York",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

配置完成后重新运行脚本,时间会自动适配夏令时偏移,不会再出现1小时偏差。

方案2:代码层面指定时区格式化(适合不需要改全局配置的场景)

如果不希望修改表格和项目的全局时区配置,可以在写入表格前,手动调用Utilities.formatDate()方法,指定带夏令时适配的地区时区对时间做格式化,替换原有直接写入Date对象的逻辑即可,修改后的循环代码段如下:

while(contents.hasNext()){
  var_file = contents.next();
  var_name = var_file.getName();
  var_link = var_file.getUrl();
  var_owner = var_file.getOwner().getName();
  var_time = var_file.getDateCreated();
  // 第二个参数替换为自身所在地区对应的IANA时区ID
  var formattedTime = Utilities.formatDate(var_time, "America/New_York", "dd/MM/yyyy HH:mm:ss");
  sheet.appendRow([var_name,var_link,var_owner, formattedTime]);
}

注意:不要使用GMT-5这类固定偏移值作为格式化方法的时区参数,固定偏移不会自动适配每年夏令时、冬令时的切换,时制切换节点会再次出现1小时偏差,必须使用IANA标准地区时区ID。

内容的提问来源于stack exchange,提问作者Rothman Mariño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:48:24