Google sheets Google Sheets单元格中迄今为止的ISO-8601字符串

Google sheets Google Sheets单元格中迄今为止的ISO-8601字符串,google-sheets,google-docs,Google Sheets,Google Docs,我在工作表的一列中有一组ISO-8601格式的字符串。我怎样才能让谷歌表格把它们当作日期,这样我就可以对它们进行计算(例如,两个单元格之间的分钟差)?我只试过=Date(“2015-05-27T01:15:00.000Z”),但没有乐趣。必须有一个简单的方法来做到这一点。有什么建议吗?试试这个 =CONCATENATE(TEXT(INDEX(SPLIT(SUBSTITUTE(A1,"Z",""),"T"),1),"yyyy-mm-dd")," ",TEXT(INDEX(SPLIT(SUBSTIT

我在工作表的一列中有一组ISO-8601格式的字符串。我怎样才能让谷歌表格把它们当作日期,这样我就可以对它们进行计算(例如,两个单元格之间的分钟差)?我只试过
=Date(“2015-05-27T01:15:00.000Z”)
,但没有乐趣。必须有一个简单的方法来做到这一点。有什么建议吗?

试试这个

=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格式字符串的单元格,也可以是字符串本身。

要获取实际日期值,可以使用常规数字格式设置格式

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

例如

A. B 1 2016-02-22T05:03:21Z 2016年2月22日上午5:03:21
我发现使用
=SUM(SPLIT(A2,“TZ”)


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

Hmmm。这看起来并不“容易”,但我会尝试一下。我真的希望已经有一个函数可以完成它。这个解决方案返回一个字符串,而不是@BobKuhar想要的日期类型。当我用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”。这两个单元格将被格式化为日期和时间。这个解决方案很好。这比公认的好。至少返回一个数字日期(时间)值,而不是字符串。我注意到,如果给定了时区偏移量,它就会被忽略。此外,假设字符串中的字符位置使此解决方案简短,可能比多次替换和拆分函数调用更快。您只需在末尾添加tz即可……+(10/24)如果10是偏移量,则该解决方案优于公认的解决方案。它还适用于时区为+xx:xx格式的iso8601,例如:2018-08-18T19:11:25+00:00(UTC)。我假设获得的datetime值具有当前语言环境的时区。在我的例子中,这不是一个问题,因为我更感兴趣的是计算粗略的统计数据和时间增量。这很糟糕,在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)
这个解决方案不错。它根据请求返回数字日期(时间)值,而不是接受答案中的字符串。它最适合GMT时间戳,而不是那些带有时区偏移的时间戳。如果给定偏移量,此解决方案将使用时间“0”。此解决方案聪明且简短,虽然不如其他方法正确,但比许多字符串函数调用要好。我发现,正式的ISO-8601是谷歌不支持的一种日期格式,这让我有点惊讶。