Je récupère des données dans une feuille Google. La colonne de date contient plusieurs cellules avec le modèle de chaîne de texte suivant:
Mon Mar 11 19:05:32 +0000 2019
Le motif se répète toujours:
[day] [month] [date] [HH:mm:ss] [Time Zone offset] [YYYY]
Ce modèle de chaîne de texte peut-il être transformé en une valeur date/heure à l'aide d'une formule?
Idéalement, je voudrais diviser les valeurs de date/heure représentées dans la chaîne de texte ci-dessus en deux colonnes: date et heure:
date | time
DD/MM/YYYY | HH:mm:ss
={DATE(RIGHT(A1, 4), MONTH(MID(A1, 5, 3)&1), REGEXEXTRACT(A1, "\d+")),
TEXT(INDEX(SPLIT(A1, " "), 1, 4), "hh:mm:ss")}
avec fuseau horaire en compte:
={DATE(RIGHT(A1, 4), MONTH(MID(A1, 5, 3)&1), REGEXEXTRACT(A1, "\d+")),
TEXT(INDEX(SPLIT(A1, " "), 1, 4)+IFERROR(
TIMEVALUE(JOIN(":", SPLIT(REGEXREPLACE(REGEXEXTRACT(A1, "\+(\d+)"),
"(.{2})", "/$1"),"/"))),
TIMEVALUE(JOIN(":0", SPLIT(REGEXREPLACE(REGEXEXTRACT(A1, "\+(\d+)"),
"(.{2})", "/$1"),"/")))), "hh:mm:ss")}
La réponse courte est oui, mais je considère qu'il est plus pratique d'utiliser une fonction personnalisée.
Google Sheets gère les dates comme des numéros de série. Le fuseau horaire est basé sur les paramètres de fuseau horaire de la feuille de calcul. Malheureusement, il n'y a pas de fonction de feuille de calcul intégrée qui convertit directement le texte comme celui indiqué sur la question, votre formule doit extraire les parties et appliquer le décalage de fuseau horaire en tenant compte du paramètre de fuseau horaire de la feuille de calcul.
Algorithme suggéré pour une solution basée sur les fonctions intégrées:
Si vous souhaitez prendre automatiquement le paramètre de fuseau horaire, vous devez utiliser la méthode de feuille de calcul de classe de script Google Apps getSpreadsheetTimeZone () et convertir le script renvoyé en une valeur de décalage de fuseau horaire. Cela résulte trop compliqué compte tenu du JavaScript gérer les dates-heures compte tenu du décalage de fuseau horaire.
Votre chaîne est délimitée par des espaces, nous pouvons donc la découper à l'aide de DIVISER , puis saisir les pièces dont nous avons besoin par numéro à l'aide de INDEX .
Le mois a besoin d'un peu de coercition car c'est un mot, donc je suggère de demander la fonction MONTH pour la date du 1 de ce moisst, mais juste le numéro du mois de ce mois. Il est capable de convertir la chaîne "Mar1" en une date, par exemple, puis de sortir son mois; 3.
Ensuite, nous pouvons simplement formater la cellule de destination en tant que date et envoyer les entrées appropriées à la fonction DATE . Par exemple:=DATE(INDEX(SPLIT(A1," "),1,6),MONTH(INDEX(SPLIT(A1," "),1,2)&1),INDEX(SPLIT(A1," "),1,3))
Dans le même ordre d'idées, vous pouvez simplement vous assurer que la cellule de destination de l'heure est formatée en tant que Time extraire la partie temporelle de la chaîne:=INDEX(SPLIT(A1," "),1,4)
Au moment où j'écris, votre question ne traite pas du décalage de fuseau horaire. Notez que toute solution peut devoir modifier l'heure de sortie, et parfois la date , en fonction de l'effet du décalage.