Question

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, de sorte qu’ils puissent être analysés avec précision et sans ambiguïté par Excel avec une intervention minimale de l’utilisateur?

Était-ce utile?

La solution

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 d'une interaction avec l'objet COM IIRC).

Autres conseils

La suggestion antérieure d'utiliser "aaaa-MM-jj HH: mm: ss" C’est bien, même si je pense qu’Excel a une résolution temporelle bien plus fine que celle. Je trouve cet article plutôt crédible (suivez le fil et vous verrez beaucoup d’arithmétiques et d’expérimentations avec Excel), et s’il est correct, vous aurez votre milliseconde. Vous pouvez simplement coller 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 manière à afficher toute cette précision. Sur mon ordinateur de travail, lorsque j’ai configuré un fichier CSV avec "aaaa-mm-jj hh: mm: ss.000" données (à la main avec Notepad), j’obtiens "mm: ss.0" dans la cellule et "m / j / aaaa & nbsp; 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ù 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 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 fractions de jours, depuis une "date").

[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".

"aaaa-MM-jj hh: mm: ss.000" format ne fonctionne pas dans tous les paramètres régionaux. Pour certains (au moins danois) "aaaa-MM-jj hh: mm: ss, 000" fonctionnera mieux.

Je pense que si vous utilisiez le type de données double , le nouveau calcul dans Excel fonctionnerait parfaitement.

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.

Encore plus loin, si les paramètres régionaux utilisent des caractères autres que ASCII, vous devez émettre du CSV dans la version "ANSI" correspondante de Windows pré-Unicode. page de code, par exemple CP1251. Excel n'acceptera pas UTF-8.

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 les gens à importer.

  

"aaaa-mm-jj hh: mm: ss.000" format ne fonctionne pas dans tous les paramètres régionaux. Pour   certains (au moins danois) "aaaa-mm-jj hh: mm: ss, 000" fonctionnera mieux.

comme répondu par l'utilisateur662894.

Je souhaite ajouter ceci: 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.

So "aaaa-mm-jj hh: mm: ss.000000 " ne fonctionnera pas et si Excel utilise ce type de chaîne (à partir du fichier CSV), il effectuera arrondi plutôt que troncature .

Cela peut aller, sauf lorsque la précision en microseconde est importante. Dans ce cas, il est préférable de NE PAS déclencher une reconnaissance automatique du type de données, mais de conserver la chaîne sous forme de chaîne ...

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;
}

Ainsi, bizarrement, Excel importe une importation csv de différentes manières. Et , les affiche différemment en fonction du format utilisé dans le fichier csv. Malheureusement, le format ISO 8061 se présente sous forme de chaîne. Ce qui vous empêche éventuellement de reformater vous-même la date.

Tous ceux qui entrent en tant que date ... contiennent toute l'information ... mais leur format est différent ... si vous ne l'aimez pas, vous pouvez choisir un nouveau format pour la colonne dans Excel et le marchera. (Remarque: vous pouvez voir qu’il s’agit d’une date / heure valide car il justifiera à droite ... s’il s’agit d’une chaîne, il justifiera à gauche)

Voici les formats que j'ai testés:

"aaaa-MM-jj" apparaît comme une date de cours lorsqu’il est ouvert dans Excel. (fonctionne également "MM / JJ / AAAA")

"aaaa-MM-jj HH: mm: ss" Le format d’affichage par défaut 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 seulement w / secondes)

Je suppose que le format ISO est une bonne idée. ( article de Wikipedia , avec également des informations horaires)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top