J'ai fait un analyseur générique pour analyser les fichiers ASCII. Lorsque je veux analyser des dates, j'utilise la fonction parseexact dans l'objet DateTime à l'analyse, mais j'ai des problèmes avec l'année. P>
Le texte à analyser est i.e. "090812" avec la chaîne de parseexact "YYMMDD". P>
J'espère obtenir un objet DateTime disant "12/8-2009", mais je reçois "12 / 8-1909". Je sais que je pourrais faire une solution laideuse en l'analysant par la suite, et modifier ainsi l'année .. p>
Quelqu'un peut savoir d'une manière intelligente de résoudre ce problème ?? p>
Merci d'avance .. p>
søren p>
3 Réponses :
Vous devrez déterminer une sorte de date de seuil adaptée à vos données. Si la date analysée est avant cette date, ajoutez 100 ans. Un moyen sûr de faire cela est de préfixer la chaîne d'entrée avec le siècle approprié. Dans cet exemple, j'ai choisi 1970 en tant que coupure: jon skeet a également posté un bon exemple en utilisant denttitimeformatinfo code> que j'avais momentanément oublié :) P > p>
Eh bien, si vous êtes certain que toutes vos dates de source sont ceci siècle, vous pouvez utiliser Parseexact contre une chaîne source "20" -Préfixée. p>
façon théoriquement élégante de faire cela: Changer le puis utilisez mode pratique de faire Ceci: ajoutez "20" au début de votre entrée et analysez avec "yyyymmdd". p> p> Twodigityearmax Code> Propriété du calendrier code> utilisé par le
DateTimeFormatinfo code> Vous utilisez pour analyser le texte . Par exemple:
dtfi code> dans votre appel sur
denttime.parseexact code>. P>
J'aime un peu comme votre solution théorique. Le DateTimeFormatinfo code> n'est qu'une installation unique de toute façon. Cela permet également de couper différentes coupures plutôt que de simplement supposer que tout est au cours de ce siècle.
C'est bien .. pas tout à fait sûr, qu'est-ce que vous essayez de faire ..!? Mais de toute façon, dtfi.calendar.twodigityearmax ne peut être réglé à un nombre supérieur à 99 .. :-( .. et je ne suis pas heureux de la solution avec juste ajouter "20" en face, car je ne peux pas garantir ce ne peut pas aboutir utilisé pour regarder des données plus anciennes
@Mullerdk: Désolé, il devrait être défini sur 2000 ... ou peut-être 1910 si vous voulez 100812 1910, etc.
(Édité le code pour 1910.) Quelle est la première année que vous verrez? À un moment donné, vous vous retrouverez avec un format ambiguë ... Vous ne pouvez pas représenter une gamme de plus de 100 ans avec seulement deux chiffres décimaux. Notez que si vous le définissez à 1910, l'année prochaine, vous devrez la définir à 1911, etc. Vous voudrez peut-être utiliser
FYI DateTimeFormatinfo.clone () appelle cela.Calendar.clone ()
datetime.now.year - 100 code>.
Les documents et autres postes suggèrent que cela devrait fonctionner pour la date à laquelle vous disposez (par exemple 2009 pour 09). Pouvez-vous poster l'appel de parseexact exact que vous faites?
Plus d'infos Ici: US / Bibliothèque / ...