如何在 Google Apps 脚本中将 BigQuery TIMESTAMP 转换为日期?
Posted
技术标签:
【中文标题】如何在 Google Apps 脚本中将 BigQuery TIMESTAMP 转换为日期?【英文标题】:How to convert BigQuery TIMESTAMP to Date in Google Apps Script? 【发布时间】:2021-04-30 22:17:28 【问题描述】:TL;DR:如何在 javascript 中将 字符串 "1.619820361123853E9"
转换为 Date
?
长篇大论:
Google Apps 脚本中BigQuery.Jobs.query()
中的TIMESTAMP
值以字符串内 的大数字形式返回。例如:
SELECT CURRENT_TIMESTAMP() AS today_timestamp
在 Google Apps 脚本项目中运行它(使用来自 https://developers.google.com/apps-script/advanced/bigquery 的代码作为指导)看起来像这样:
const request =
query: "SELECT CURRENT_TIMESTAMP() AS today_timestamp",
useLegacySql: false
;
let queryResults = BigQuery.Jobs.query(request, DW_PROJECT_ID);
let jobId = queryResults.jobReference.jobId;
let sleepTimeMs = 500;
while (!queryResults.jobComplete)
Logger.log(`Waiting for query: $jobId ($sleepTimeMs)`);
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(DW_PROJECT_ID, jobId);
let rows = queryResults.rows;
while (queryResults.pageToken)
queryResults = BigQuery.Jobs.getQueryResults(DW_PROJECT_ID, jobId,
pageToken: queryResults.pageToken
);
rows = rows.concat(queryResults.rows);
let data = new Array(rows.length);
for (let i = 0; i < rows.length; i++)
let cols = rows[i].f;
data[i] = new Array(cols.length);
for (let j = 0; j < cols.length; j++)
data[i][j] = cols[j].v;
Logger.log(`BQ to JavaScript TIMESTAMP: $data[0][0]`)
结果是data[0][0]
类似于"1.619820361123853E9"
(一个字符串)。
如何将其转换为Date
?
【问题讨论】:
它看起来像 Date() 值所以尝试 new Date(value); ref 尝试new Date(parseFloat("1.619820361123853E9"))
给我 1970 年 1 月 19 日星期一 09:57:00 GMT-0800(太平洋标准时间)......这是不对的! :)
啊哈! new Date(Number("1.619820361123853E9") * 1000)
...感谢***.com/questions/10943997/…
【参考方案1】:
为了将字符串转换为日期,你应该试试这个:
new Date(Number("1.619820361123853E9") * 1000)
【讨论】:
以上是关于如何在 Google Apps 脚本中将 BigQuery TIMESTAMP 转换为日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Apps 脚本在 Google 表格中“清除格式”
如何在 Google Apps 脚本中使用服务帐户对 Google 表格进行身份验证
如何使用 Google Apps 脚本在个人 Google 云端硬盘和团队云端硬盘之间移动文件?