web-dev-qa-db-fra.com

Meilleur format d'horodatage pour CSV/Excel?

J'écris un fichier CSV. Je dois é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, de sorte qu'ils puissent être analysés avec précision et sans ambiguïté par Excel avec une intervention minimale de l'utilisateur?

93
Jon

Pour une seconde précision, aaaa-MM-jj HH: mm: ss devrait faire l'affaire.

Je crois qu'Excel n'est pas très bon avec des fractions de seconde (les perd lors d'une interaction avec l'objet COM IIRC).

82
Joe

La suggestion antérieure d'utiliser "aaaa-MM-jj HH: mm: ss" convient, bien que je pense qu'Excel a une résolution temporelle bien plus fine que celle. Je trouve ce message plutôt crédible (suivez le fil et vous verrez beaucoup d’arithmétiques et d’expérimentations avec Excel), et si c’est correct, vous aurez vos millisecondes. Vous pouvez simplement vous arrêter sur les décimales à la fin, c'est-à-dire "aaaa-mm-jj hh: mm: ss.000".

Vous devez savoir qu'Excel ne formate pas nécessairement les données (sans intervention humaine) de telle sorte que vous puissiez voir toute cette précision. Sur mon ordinateur de travail, lorsque je configure un fichier CSV avec les données "aaaa-mm-jj hh: mm: ss.000" (manuellement à l'aide du bloc-notes), j'obtiens "mm: ss.0" et "m/j/aaaa hh: mm: SS AM/PM "dans la barre de formule.

Pour un maximum d'informations [1] véhiculées dans les cellules sans intervention humaine, vous pouvez scinder votre horodatage en une partie date et une partie heure, la partie heure n'étant que de la seconde. Il me semble qu'Excel veut vous donner au plus trois "niveaux" visibles (où des fractions de seconde sont leur propre niveau) dans une cellule donnée, et vous 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 souhaitiez 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 "époque").


[1] C'est-à-dire des informations numériques. Si vous voulez voir le plus d’informations possible sans vous soucier de faire des calculs, vous pouvez créer un format que Excel va certainement analyser comme une chaîne, et donc laisser seul; par exemple. "aaaammjjj.hhmmss.000".

15
John Y

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.

12
user662894

Je crois que si vous utilisiez le type de données double, le recalcul dans Excel fonctionnerait parfaitement.

4
Peter Perháč

Accédez aux paramètres de langue du Panneau de configuration, puis Options de format, sélectionnez un environnement local et voyez le format de date réel pour l'environnement local 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 autres que ASCII, vous devez émettre un fichier CSV dans la page de codes "ANSI" Windows antérieure à Unicode, par exemple. CP1251. Excel n'acceptera pas UTF-8.

3
John Smith

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" fonctionneront mieux.

comme répondu par user662894.

Je veux ajouter ceci: n’essayez pas d’obtenir les microsecondes, par exemple, du type de données datetime2 de SQL Server: Excel ne peut pas gérer plus de 3 secondes (c’est-à-dire des millisecondes).

Donc, "aaaa-mm-jj hh: mm: ss.000000" ne fonctionnera pas et si Excel est alimenté avec ce type de chaîne (à partir du fichier CSV), il exécutera arrondi plutôt que troncation .

Cela peut convenir sauf lorsque la précision en microsecondes est importante. Dans ce cas, vous feriez mieux de ne PAS déclencher une reconnaissance automatique du type de données, mais de conserver la chaîne sous forme de chaîne ...

1
Hansjp

En ce qui concerne les fuseaux horaires. Je dois stocker le décalage UTC en secondes par rapport au temps UTC afin que les formules dans Excel/OpenOffice puissent éventuellement localiser des dates/heures. J'ai trouvé que c'était plus facile que de stocker tout nombre précédé d'un 0. -0900 n'a pas bien analysé les tableurs et il était presque impossible de former des personnes.

1
whardier

Donc, bizarrement, Excel importe une date CSV de différentes manières. Et , les affiche différemment selon le format utilisé dans le fichier csv. Malheureusement, le format ISO 8061 est présenté sous forme de chaîne. Ce qui vous empêche éventuellement de reformater vous-même la date.

Tous ceux-là entrent comme une date ... contiennent toute l'information ... mais ils ont un format différent ... si vous ne l'aimez pas, vous pouvez choisir un nouveau format pour la colonne dans Excel et cela fonctionnera. (Remarque: vous pouvez dire que cela est entré comme une date/heure valide car cela justifiera à droite ... s'il s'agit d'une chaîne, il laissera à justifier)

Voici les formats que j'ai testés:

"aaaa-MM-jj" apparaît comme une date de cours lors de son ouverture 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 en secondes)

Le format d'affichage par défaut "aaaa-MM-jj HH: mm: ss.fff" est "HH: mm: ss" (heure uniquement en secondes)

0
Brian Rice

Essayez MM/jj/aaaa hh: mm: ss un format.

Code Java pour créer un fichier XML.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("date"), "MM/jj/aaaa hh: mm: ss a")). append ("" ");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}
0
Anoop Velluva