2009-05-15 8 views
6

Problème:ordinal Format de date C#

On vous donne les dates dans un format de AAAAJJJ, qui est l'année, suivi du jour de l'année, 1 à 365 (366). Par exemple aujourd'hui serait 2009135 (15/05/2009).

Quelle est la meilleure façon de créer un nouveau datetime à partir de cela? Ruby Je sais qu'il ya un constructeur qui prend deux nombres comme si

Date.ordinal(2009, 135) 

est-il un constructeur similaire pour C#?

Répondre

10

Hmm, je ne sais pas s'il y a une façon plus directe, mais cela devrait fonctionner

new DateTime(year, 1, 1).AddDays(day - 1); 
3

Que diriez-vous:

new DateTime(ordinal/1000, 1, 1).AddDays((ordinal % 1000) - 1); 

Cela repose le jour 1 de 2009 étant représenté comme 2009001 plutôt 20091 cependant. Si c'est le dernier, c'est un peu plus compliqué (bien que ce ne soit pas vraiment dur, bien sûr).

Je voudrais essayer de s'éloigner d'un tel format assez rapidement cependant - ce n'est pas exactement un commun, et il est complètement illisible. En supposant que le format "2009001" le trie au moins raisonnablement, mais je ne peux pas penser à autre chose en sa faveur.

+0

oh croyez-moi, c'est pourquoi je le convertis. C'est juste comme cela nous a été remis. nous prenons ce format et importons dans notre base de données, mais le convertissons en un datetime normal. Btw, j'aime ta réponse, ça m'a frappé de le faire comme la première réponse, mais je préfère le faire en une ligne. Devinez c'est le Ruby en moi. Et yah, ça sort toujours dans un format YYYYddd. – taelor

+0

btw, je viens de donner la réponse à l'autre personne. il n'a que 4k points, et je veux partager l'amour. – taelor

+0

Pas de problème - Je ne pense pas que perdre 15 va me faire trop mal :) –

1
int year = 2009; 
int month = 1; 
int day = 1; 
int dayOfYear= 135; 

DateTime myDate = new DateTime(year, month, day); 
myDate.AddDays(dayOfYear - 1);