Google表格单元格中的ISO-8601字符串到目前为止

Bob*_*har 45 google-docs google-sheets

我在工作表的一列中有一堆ISO-8601格式的字符串.如何将谷歌表格作为日期处理,以便我可以对它们进行数学计算(例如,两个单元格之间的分钟数差异)?我尝试了=Date("2015-05-27T01:15:00.000Z")但没有快乐.必须有一个简单的方法来做到这一点.有什么建议?

rco*_*oup 69

要获取可以使用正常数字格式设置格式的实际日期值...

=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 ?
?????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
  • 假设时间戳是UTC
  • 忽略毫秒(虽然你可以轻松添加)

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

上面的公式分别解析日期部分和时间部分,然后将它们加在一起.

  • 糟糕的是,在 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))),值(中(A1,29,2))/60/24, 0)` (4认同)
  • 你可以在最后添加tz....... +(10/24)其中10是偏移量 (3认同)
  • 工作了!我必须将列的格式设置为“时间” (3认同)

Aks*_*lov 15

试试这个

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

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


Chr*_*ndy 15

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

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

  • 这个解决方案还不错。它根据请求返回数字日期(时间)值,而不是接受答案中的字符串。它最适用于 GMT 时间戳,而不是具有时区偏移的时间戳。如果给出偏移量,则该解决方案使用时间“0”。这个解决方案聪明而简短,虽然不如[其他答案](/a/36176351/543738)正确,但比许多字符串函数调用更好。 (2认同)