如何通过Google Script获取Google Drive文件的原始创建时间
问题背景
用户将大量日志文件上传至Google Drive文件夹用于合并分析,需要保留文件原始创建/修改时间,同时通过Google Script将日志数据导入Google Sheet。目前遇到两个关键问题:
- 仅含UTC时间戳的日志:无法获取文件原始创建时间,导致无法计算生成日志的设备UTC偏移量(常规方法为首个日志条目时间减去文件原始创建时间得到小时差)
- 采用文件创建后ticks计时的日志:虽首个条目记录了创建时间,但该格式依赖区域设置,且存在12小时制/24小时制的差异,难以解析
另外,用户验证发现:DriveApp的getDateCreated()和getLastUpdated()方法返回的是文件上传时间,而非本地原始创建/修改时间,因此询问是否可通过Google Script获取文件原始时间(希望避免使用rclone等外部工具简化操作)
核心结论
仅通过Google Apps Script的Drive服务(包括DriveApp或Advanced Drive Service)无法直接获取上传文件的原始创建/修改时间。原因是Google Drive在接收上传文件时,会自动将上传时间设为文件的创建和更新时间,文件本地的原始时间元数据不会被默认同步到Drive的文件属性中。
替代解决方案
1. 上传时手动补充原始时间元数据
- 修改文件名:上传前将文件名改为包含原始创建时间的格式,例如
[202405201430]_sample_log.txt,后续通过Google Script提取文件名中的时间字符串进行解析 - 填写文件描述:上传后在Drive文件的「描述」字段中手动填入原始创建/修改时间,使用
DriveApp.getFileById(id).getDescription()即可读取该信息
2. 利用Google Drive自定义属性批量注入原始时间
如果能提前导出本地文件列表(包含文件名和原始创建/修改时间),可以通过Google Script调用Advanced Drive Service批量给对应Drive文件添加自定义属性:
function addOriginalTimeProperty(fileId, originalTimeStr) { var file = Drive.Files.get(fileId); file.properties = file.properties || {}; file.properties.originalCreatedTime = originalTimeStr; // 传入ISO格式时间字符串,如"2024-05-20T14:30:00Z" Drive.Files.update(file, fileId); }
之后即可通过DriveApp.getFileById(id).getProperty("originalCreatedTime")读取原始时间。
3. 针对日志本身的适配方案
- 对于UTC时间戳日志:若日志中包含设备ID、事件关联的本地时间线索等信息,可尝试通过这些信息推断设备时区,替代文件原始时间计算偏移量
- 对于ticks计时日志:尝试枚举可能的时间格式,用
Utilities.parseDate()批量解析首个条目的创建时间,示例代码:
function parseLogCreationDate(dateStr) { // 枚举常见的时间格式,覆盖12/24小时制、不同日期顺序 var possibleFormats = [ "MM/dd/yyyy hh:mm:ss a", "MM/dd/yyyy HH:mm:ss", "dd/MM/yyyy hh:mm:ss a", "dd/MM/yyyy HH:mm:ss", "yyyy-MM-dd hh:mm:ss a", "yyyy-MM-dd HH:mm:ss" ]; for (var format of possibleFormats) { try { // 尝试用UTC时区解析,后续可根据实际情况调整时区参数 return Utilities.parseDate(dateStr, "UTC", format); } catch (e) { // 格式不匹配,继续尝试下一个 continue; } } return null; // 所有格式匹配失败 }
内容的提问来源于stack exchange,提问作者Mikael Ellingsen
相关产品推荐
相关产品推荐

