J'écris un fichier CSV. J'ai besoin d'écrire des horodatages précis au moins à la seconde, et de préférence à la milliseconde. Quel est le meilleur format pour les horodatages dans un fichier CSV afin qu'ils puissent être analysés avec précision et sans ambiguïté par Excel avec une intervention minimale de l'utilisateur?
110
Réponses:
Pour une seconde précision, aaaa-MM-jj HH: mm: ss devrait faire l'affaire.
Je pense qu'Excel n'est pas très bon avec des fractions de seconde (les perd lors de l'interaction avec l'objet COM IIRC).
la source
strftime
, la chaîne d'argument équivalente est"%Y-%m-%d %H:%M:%S"
.CSV
est juste un fichier texte. Vous pouvez afficher le fuseau horaire ou tout autre élément que vous écrivez dans le fichier sous forme de texte brut séparé par des virgules; ce qui est important, c'est quelle application va le lire et comment cette application attend le texte. Voici la documentation de la norme CSV de la Bibliothèque du Congrès. Il n'existe aucun moyen prescrit de stocker spécifiquement les dates. Aussi RFC-4180 et CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)."%Y-%m-%d %H:%M:%S"
- le même que Ruby.La suggestion précédente d'utiliser "aaaa-MM-jj HH: mm: ss" est très bien, même si je pense qu'Excel a une résolution temporelle beaucoup plus fine que cela. Je trouve ce post plutôt crédible (suivez le fil et vous verrez beaucoup d'arithmétique et d'expérimentation avec Excel), et s'il est correct, vous aurez vos millisecondes. Vous pouvez simplement virer les décimales à la fin, c'est-à-dire "aaaa-mm-jj hh: mm: ss.000".
Vous devez être conscient qu'Excel ne formate pas nécessairement les données (sans intervention humaine) de manière à ce que vous puissiez voir toute cette précision. Sur mon ordinateur au travail, lorsque je configure un fichier CSV avec des données "aaaa-mm-jj hh: mm: ss.000" (à la main à l'aide du Bloc-notes), j'obtiens "mm: ss.0" dans la cellule et "m / j / aaaa hh: mm: ss AM / PM "dans la barre de formule.
Pour obtenir un maximum d'informations [1] transmises dans les cellules sans intervention humaine, vous souhaiterez peut-être diviser votre horodatage en une partie de date et une partie d'heure, avec la partie d'heure uniquement à la seconde. Il me semble qu'Excel veut vous donner au plus trois "niveaux" visibles (où les fractions de seconde sont leur propre niveau) dans une cellule donnée, et vous en voulez sept: années, mois, jours, heures, minutes, secondes, et des fractions de seconde.
Ou, si vous n'avez pas besoin que l'horodatage soit lisible par l'homme mais que vous voulez qu'il soit aussi précis que possible, vous préférerez peut-être simplement stocker un grand nombre (en interne, Excel utilise simplement le nombre de jours, y compris les jours fractionnaires , depuis une date "d'époque").
[1] Autrement dit, des informations numériques. Si vous voulez voir autant d'informations que possible mais que vous ne vous souciez pas de faire des calculs avec elle, vous pouvez créer un format qu'Excel analysera certainement comme une chaîne et laissera ainsi seul; par exemple "aaaammjj.hhmmss.000".
la source
Le format "aaaa-MM-jj hh: mm: ss.000" ne fonctionne pas dans tous les paramètres régionaux. Pour certains (au moins danois) "aaaa-MM-jj hh: mm: ss, 000" fonctionnera mieux.
la source
Je pense que si vous utilisiez le
double
type de données, le recalcul dans Excel fonctionnerait très bien.la source
Accédez aux paramètres de langue dans le Panneau de configuration, puis Options de format, sélectionnez un paramètre régional et voyez le format de date réel pour le paramètre régional choisi utilisé par Windows par défaut. Oui, ce format d'horodatage est sensible aux paramètres régionaux. Excel utilise ces formats lors de l'analyse CSV.
De plus, si les paramètres régionaux utilisent des caractères au-delà de ASCII, vous devrez émettre CSV dans la page de codes Windows "ANSI" pré-Unicode correspondante, par exemple CP1251. Excel n'acceptera pas UTF-8.
la source
Quant aux fuseaux horaires. Je dois stocker le décalage UTC en secondes par rapport à UTC de cette façon, les formules dans Excel / OpenOffice peuvent éventuellement localiser les dates et heures. J'ai trouvé que c'était plus facile que de stocker n'importe quel nombre qui a un 0 devant lui. -0900 n'a pas été bien analysé dans aucun système de feuille de calcul et il était presque impossible de former les gens à le faire.
la source
comme répondu par user662894.
Je veux ajouter: n'essayez pas d'obtenir les microsecondes à partir, par exemple, du type de données datetime2 de SQL Server: Excel ne peut pas gérer plus de 3 fractions de seconde (c.-à-d. Millisecondes).
Donc "aaaa-mm-jj hh: mm: ss.000000" ne fonctionnera pas, et quand Excel reçoit ce type de chaîne (à partir du fichier CSV), il effectuera un arrondi plutôt qu'une troncature .
Cela peut être bien sauf lorsque la précision de la microseconde compte, auquel cas il vaut mieux NE PAS déclencher une reconnaissance automatique du type de données mais simplement garder la chaîne sous forme de chaîne ...
la source
Je suppose que le format ISO est une bonne idée. ( Article Wikipédia , également avec des informations sur l'heure)
la source
Essayez MM / jj / aaaa hh: mm: ss un format.
Code Java pour créer un fichier XML.
la source
Donc, bizarrement, Excel importe une date csv de différentes manières. Et affiche différemment selon le format utilisé dans le fichier csv. Malheureusement, le format ISO 8061 se présente sous forme de chaîne. Ce qui vous empêche de reformater vous-même la date.
Tous ceux qui sont fournis sous forme de date ... contiennent toutes les informations ... mais ils se mettent en forme différemment ... si vous ne l'aimez pas, vous pouvez choisir un nouveau format pour la colonne dans Excel et cela fonctionnera. (Remarque: vous pouvez dire qu'il est entré comme une date / heure valide car il justifiera à droite ... s'il entre sous forme de chaîne, il justifiera à gauche)
Voici les formats que j'ai testés:
"aaaa-MM-jj" apparaît bien sûr comme une date lorsqu'il est ouvert dans Excel. (aussi "MM / jj / aaaa" fonctionne)
Le format d'affichage par défaut "aaaa-MM-jj HH: mm: ss" est "MM / jj / aaaa HH: mm" (date et heure sans secondes)
"aaaa-MM-jj HH: mm: ss.fff" Le format d'affichage par défaut est "HH: mm: ss" (heure uniquement w / secondes)
la source
Étant donné un fichier csv avec une colonne datetime dans ce format: aaaa-mm-jj hh: mm: ss
Excel l'affiche dans ce format: jj / mm / aaaa hh: mm
Par exemple, 2020-05-22 16:40:55 apparaît comme 22/05/2020 16:40
Ceci est évidemment déterminé par le format de date courte et d'heure courte sélectionné dans Windows; par exemple, si je change le format de date courte dans Windows en aaaa-mm-jj, Excel affiche 2020-05-22 16:40.
Malheureusement, je ne trouve aucun moyen pour qu'Excel affiche automatiquement les secondes (je dois formater manuellement la colonne dans Excel). Mais si le fichier csv comprend une colonne d'heure au format hh: mm: ss (par exemple 16:40:55), c'est ce qui s'affiche dans Excel, y compris les secondes.
la source