Meilleur format d'horodatage pour CSV / Excel?
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?
9 réponses
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 de l'interaction avec L'objet COM IIRC).
La suggestion précédente d'utiliser "yyyy-MM-dd HH: mm: ss" est bien, bien que je crois Qu'Excel a une résolution de temps 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 si c'est correct, vous aurez vos millisecondes. Vous pouvez simplement pointer les décimales à la fin, c'est-à-dire " AAAA-mm-JJ hh: mm: ss.000".
Vous devez être conscient Qu'Excel ne peut pas nécessairement formater les données (sans humain intervention) de telle sorte que vous verrez toute cette précision. Sur mon ordinateur au travail, quand je mets en place un CSV avec " AAAA-mm-JJ hh: mm: SS.000 "données (à la main en utilisant le bloc-notes), je reçois" mm: SS.0" dans la cellule et "m / J / aaaa hh: mm: ss AM / PM" dans la barre de formule.
Pour un maximum d'informations[1] transmises dans les cellules sans intervention humaine, vous pouvez diviser votre horodatage en une partie de date et une partie de temps, avec la partie de temps seulement à la seconde. Il me semble que Excel veut pour vous donner au plus trois "niveaux" visibles (où les fractions de seconde sont leur propre niveau) dans une cellule donnée, et vous voulez sept: années, mois, jours, heures, minutes, secondes et 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 "époque").
[1]c'est-à-dire, les informations numériques. Si vous voulez voir autant d'informations que possible mais ne vous souciez pas de faire des calculs avec, vous pouvez créer un format Qu'Excel analysera définitivement comme une chaîne, et donc laisser seul; par exemple "AAAAMMJJ.hhmmss.000".
"yyyy-MM-dd hh:mm:ss.000" format ne fonctionne pas dans tous les lieux. Pour certains (au moins Danois) "AAAA-MM-JJ hh: mm: ss, 000" fonctionnera mieux.
Je crois que si vous utilisiez le type de données double
, le re-calcul dans Excel fonctionnerait très bien.
Accédez aux paramètres de langue dans le Panneau de configuration, puis aux options de Format, sélectionnez une locale et voyez le format de date réel pour la locale choisie utilisée 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.
Encore plus loin, si les paramètres régionaux utilisent des caractères au-delà de L'ASCII, vous devrez émettre CSV dans la page de Code "ANSI" de Windows pré-Unicode correspondante, par exemple CP1251. Excel n'acceptera pas UTF-8.
Comme pour les fuseaux horaires. Je dois stocker le décalage UTC en secondes à partir D'UTC de cette façon, les formules dans Excel / OpenOffice peuvent éventuellement localiser les datetimes. J'ai trouvé cela plus facile que de stocker n'importe quel nombre qui a un 0 devant lui. -0900 n'a pas bien analysé dans n'importe quel système de feuille de calcul et l'importation était presque impossible de former les gens à faire.
" AAAA-mm-JJ hh: mm: SS.000" format ne fonctionne pas dans tous les lieux. Pour certains (au moins Danois) "AAAA-mm-JJ hh: mm: ss, 000" fonctionneront mieux.
Comme répondu par user662894.
Je veux ajouter: n'essayez pas d'obtenir les microsecondes du type de données datetime2 de SQL Server: Excel ne peut pas gérer plus de 3 secondes fractionnaires (c'est-à-dire millisecondes).
Donc " AAAA-mm-JJ hh: mm: SS.000000" ne fonctionnera pas, et quand Excel est alimenté ce genre de chaîne (à partir du fichier CSV) , il effectuer arrondi plutôt que troncature.
Cela peut être bien sauf lorsque la précision de la microseconde est importante, auquel cas il vaut mieux ne pas déclencher une reconnaissance automatique de type de données mais simplement garder la chaîne en tant que chaîne...
Essayez le format MM/jj/aaaa hh:mm:ss a.
Code Java pour créer un fichier XML.
XmlResponse.ajouter ("mydate>").append(ce.formatDate(resultSet.méthode gettimestamp (la"date"), "MM/jj/aaaa hh:mm:ss")).ajouter ( "" );
public String formatDate(Date date, String format)
{
String dateString = "";
if(null != date)
{
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateString = dateFormat.format(date);
}
return dateString;
}
Je suppose que ISO-format est une bonne idée. (article Wikipedia , également avec des informations sur le temps)