2015-05-27 17 views
19

Ho una serie di stringhe formattate ISO-8601 in una colonna del mio foglio. Come posso ottenere google fogli per trattarli come date in modo da poter fare matematica su di loro (differenza in minuti tra due celle, per esempio)? Ho provato solo =Date("2015-05-27T01:15:00.000Z") ma non-gioia. Ci deve essere un modo semplice per farlo. Qualche consiglio?Stringa ISO-8601 nella cella di Google Fogli

risposta

12

Prova questa

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

Dove A1 può essere una cella con ISO-8601 stringa formattata o la stringa stessa.

+1

Hmmm. Questo non sembra esattamente "facile", ma gli darò un vortice. Speravo davvero che esistesse già una sola funzione per farlo. –

+0

Questa soluzione restituisce una stringa, non un tipo di data come voleva @BobKuhar. Quando l'ho provato con la stringa di tempo ISO 8601 di, '2016-07-26T11: 12: 06.711-0400', il risultato era' 2016-07-26 11: 12: 06.711-0400'. Come stringa di tempo GMT (senza offset fuso orario), '2016-07-26T11: 12: 06.711Z' è diventato' 2016-07-26 11: 12: 07'. Questa soluzione riformatta semplicemente la stringa ISO 8601. –

+0

Devi dividere il risultato, per suddividerlo in "2016-07-26" e "11:12:07". Queste due celle verranno formattate come Data e Ora. –

24

per ottenere un valore Date reale che è possibile formattare utilizzando il numero normale formattazione ...

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

ad es.

╔═══╦══════════════════════╦════════════════════╗ 
║ ║   A   ║   B   ║ 
╠═══╬══════════════════════╬════════════════════╣ 
║ 1 ║ 2016-02-22T05:03:21Z ║ 2/22/16 5:03:21 AM ║ 
╚═══╩══════════════════════╩════════════════════╝ 
  • Considerando una timestamp sono in UTC
  • Ignora millisecondi (anche se si potrebbe aggiungere abbastanza facilmente)

La funzione DATEVALUE() trasforma una stringa data formattata in un valore, e TIMEVALUE() fa lo stesso per tempi. Nella maggior parte dei fogli elettronici le date & sono rappresentate da un numero in cui la parte intera è giorni dal 1 ° gennaio 1900 e la parte decimale è il tempo come frazione del giorno. Ad esempio, l'11 giugno 2009 alle 17:30 è circa 39975,72917.

La formula precedente analizza separatamente la parte di data e la parte di tempo, quindi li aggiunge insieme.

+0

Questa soluzione è buona. È migliore di quello accettato. Almeno questo restituisce un valore numerico di data (ora), non una stringa. Ho notato che se viene fornito un offset fuso orario, viene semplicemente ignorato. Inoltre, l'assunzione delle posizioni dei caratteri nella stringa rende questa soluzione breve e probabilmente più veloce di molte chiamate di funzioni di sostituzione e di divisione. –

+1

puoi semplicemente aggiungere il tz alla fine. ... + (10/24) dove 10 è l'offset – Sam

9

ho trovato molto più semplice da utilizzare =SUM(SPLIT(A2,"TZ"))

Format yyyy-MM-dd HH:mm:ss.000 di vedere di nuovo il valore di data come ISO-8601.

+0

Questa soluzione non è male. Restituisce un valore di data (ora) numerico come richiesto, anziché una stringa come nella risposta accettata. Funziona meglio con i timestamp GMT, non quelli con offset del fuso orario. Se viene fornito un offset, questa soluzione utilizza un tempo di "0". Questa soluzione è intelligente e breve, anche se non è corretta come [l'altra risposta] (/ a/36176351/543738), ma è migliore di molte chiamate a funzioni stringa. –

Problemi correlati