2015-05-27 69 views
19

我在表單的一列中有一堆ISO-8601格式的字符串。我怎樣才能讓Google表格將它們當作日期對待,以便我可以對它們進行數學運算(例如,兩個單元格之間的差異以分鐘爲單位)?我只嘗試=Date("2015-05-27T01:15:00.000Z")但沒有喜悅。必須有一個簡單的方法來做到這一點。有什麼建議?ISO-8601 Google表格單元格中的字符串

回答

12

試試這個

=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格式的字符串或字符串本身的細胞。

+1

嗯。這看起來不太「容易」,但我會給它一個旋風。我真的希望已經有一個功能可以做到。 –

+0

此解決方案返回一個字符串,而不是@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字符串。 –

+0

你必須拆分結果,將其分解爲「2016-07-26」和「11:12:07」。這兩個單元格將被格式化爲日期和時間。 –

24

爲了得到一個實際的日期值,你可以使用普通的數字格式格式化......

=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。

上述公式分別解析日期部分和時間部分,然後將它們相加。

+0

這個解決方案很好。這比接受的好。至少這會返回一個數值Date(Time)值,而不是一個字符串。我注意到,如果給出了時區偏移量,它就被忽略了。此外,字符串中字符位置的假設使得此解決方案較短並且可能比幾個替換和拆分函數調用更快。 –

+1

你可以在最後加上tz。 ... +(10/24)其中10是偏移量 – Sam

9

我發現它更易於使用=SUM(SPLIT(A2,"TZ"))

格式yyyy-MM-dd HH:mm:ss.000再次看到日期值作爲ISO-8601。

+0

該解決方案並不錯。它根據請求返回一個數值Date(Time)值,而不是如接受的答案中的字符串。它最適用於GMT時間戳,而不是帶時區偏移量的時間戳。如果給出偏移量,則此解決方案使用「0」的時間。這個解決方案雖然不像[其他答案](/ a/36176351/543738)那樣正確,但卻比許多字符串函數調用要好。 –

相關問題