2009-05-15 22 views
6

problema:ordinale Formato data C#

Si sono dati date in un formato di AAAAGGG, che è l'anno, seguito dal giorno dell'anno, da 1 a 365 (366). Ad esempio oggi sarebbe il 2009135 (15/05/2009).

Qual è il modo migliore per creare un nuovo datetime da questo? In Ruby So che c'è un costruttore che prende due numeri in questo modo

Date.ordinal(2009, 135) 

è un costruttore simile per C#?

risposta

10

Hmm, io non sono sicuro se c'è un modo più diretto, ma questo dovrebbe funzionare

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

ne dite:

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

Questo si basa il giorno 1 del 2009 viene rappresentato come 2.009.001 piuttosto 20091 però. Se è il secondo, è leggermente più complicato (anche se non è ancora esattamente difficile, ovviamente).

Vorrei provare ad allontanarmi da un tale formato abbastanza rapidamente però - non è esattamente un comune, ed è completamente illeggibile. Supponendo che il formato "2009001" sia almeno ragionevole, ma non posso pensare a molto altro in suo favore.

+0

oh fidati, è per questo che lo sto convertendo. Questo è proprio il modo in cui ci viene consegnato. prendiamo quel formato e importiamo nel nostro database, ma lo convertiamo in un normale datetime. A proposito, mi piace la tua risposta, mi ha colpito per farlo come la prima risposta, ma preferirei farlo in una riga. Indovina il Ruby in me. E tu, è sempre uscito in un formato YYYYddd. – taelor

+0

btw, in realtà ho appena dato la risposta all'altra persona. ha solo 4k in punti e voglio condividere l'amore. – taelor

+0

Nessun problema - Non credo che perdere 15 mi faccia molto male :) –

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

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