Google 表格单元格中的 ISO-8601 字符串到日期

Posted

技术标签:

【中文标题】Google 表格单元格中的 ISO-8601 字符串到日期【英文标题】:ISO-8601 String to Date in Google Sheets cell 【发布时间】:2015-08-10 03:37:31 【问题描述】:

我的工作表的一列中有一堆 ISO-8601 格式的字符串。如何让谷歌表格将它们视为日期,以便我可以对它们进行数学运算(例如,两个单元格之间的分钟差异)?我只试过=Date("2015-05-27T01:15:00.000Z"),但不高兴。必须有一个简单的方法来做到这一点。有什么建议吗?

【问题讨论】:

我发现正式的 ISO-8601 是 Google 不支持的 one 日期格式有点令人惊讶。 【参考方案1】:

要获得可以使用普通数字格式格式化的实际日期值...

=DATEVALUE(MID(A1,1,10)) + TIMEVALUE(MID(A1,12,8))

例如。

A B
1 2016-02-22T05:03:21Z 2/22/16 5:03:21 AM
假设时间戳采用 UTC 格式 忽略毫秒(尽管您可以轻松添加)

DATEVALUE() 函数将格式化的日期字符串转换为值,TIMEVALUE() 对时间执行相同的操作。在大多数电子表格中,日期和时间由一个数字表示,其中整数部分是自 1900 年 1 月 1 日以来的天数,小数部分是时间的一部分。例如,2009 年 6 月 11 日 17:30 大约是 39975.72917。

上面的公式分别解析日期部分和时间部分,然后将它们相加。

【讨论】:

这个解决方案很好。它比公认的要好。至少这会返回一个数字日期(时间)值,而不是一个字符串。我注意到如果给出了时区偏移量,它就会被忽略。此外,字符串中字符位置的假设使这个解决方案更短,并且可能比几个替换和拆分函数调用更快。 ? 您可以在末尾添加 tz。 ... + (10/24) 其中 10 是偏移量 这个解决方案比公认的要好。它也适用于时区为 +xx:xx 格式的 iso8601,例如:UTC 格式的 2018-08-18T19:11:25+00:00。我想获得的日期时间值具有当前语言环境的时区。就我而言,这不是问题,因为我对计算粗略的统计数据和时间增量更感兴趣。 在 ISO8601 规范推出 31 年后,这仍然是正确答案——但它确实如此!我还需要支持时区——可选的时区,包括分钟偏移量——并最终得到了这个怪物:=DATEVALUE(MID(A1,1,10)) + TIMEVALUE(MID(A1,12,8)) + if(ISNUMBER(VALUE(MID(A1,24,3))), VALUE(MID(A1,24,3))/24, 0) + if(ISNUMBER(VALUE(MID(A1,29,2))), VALUE(MID(A1,29,2))/60/24, 0)【参考方案2】:

我发现使用=SUM(SPLIT(A2,"TZ")) 更简单

格式化 yyyy-MM-dd HH:mm:ss.000 以再次将日期值视为 ISO-8601。

【讨论】:

这个解决方案还不错。它根据请求返回数字日期(时间)值,而不是接受答案中的字符串。它最适用于 GMT 时间戳,而不是带有时区偏移的时间戳。如果给出了偏移量,则此解决方案使用时间“0”。这个解决方案聪明而简短,虽然不如the other answer 正确,但比许多字符串函数调用要好。 ?【参考方案3】:

试试这个

=CONCATENATE(TEXT(INDEX(SPLIT(SUBSTITUTE(A1,"Z",""),"T"),1),"yyyy-mm-dd")," ",TEXT(INDEX(SPLIT(SUBSTITUTE(A1,"Z",""),"T"),2),"hh:mm:ss"))

其中 A1 可以是具有 ISO-8601 格式字符串的单元格,也可以是字符串本身。

【讨论】:

嗯。这看起来并不“容易”,但我会试一试。我真的希望已经有一个功能可以做到这一点。 此解决方案返回一个字符串,而不是 @BobKuhar 想要的 Date 类型。当我使用 ISO 8601 时间字符串 2016-07-26T11:12:06.711-0400 对其进行测试时,结果为 2016-07-26 11:12:06.711-0400。作为 GMT 时间字符串(没有时区偏移),2016-07-26T11:12:06.711Z 变为 2016-07-26 11:12:07。此解决方案只是重新格式化 ISO 8601 字符串。 您必须拆分结果,将其分解为“2016-07-26”和“11:12:07”。这两个单元格将被格式化为日期和时间。

以上是关于Google 表格单元格中的 ISO-8601 字符串到日期的主要内容,如果未能解决你的问题,请参考以下文章

按下单元格中的按钮时从 Google 表格触发 webhook

是否有 Google 表格公式可以将表格名称放入单元格中?

Google表格 - 将单元格中的多个单词与另一个单元格进行比较并计算匹配数量

根据 Google 表格中的第一个单元格格式化列中的单元格

有没有办法从 Google 表格单元格中获取“标题文本”?

从Google电子表格单元格中解析Json