2009-05-15 39 views
6

Problema:ordinal Formato de fecha C#

Se le da fechas en un formato de AAAADDD, que es el año, seguido por el día del año, del 1 al 365 (366). Por ejemplo, hoy sería 2009135 (5/15/2009).

¿Cuál es la mejor manera de crear una nueva fecha y hora a partir de esto? En Rubí Sé que hay un constructor que toma dos números al igual que

Date.ordinal(2009, 135) 

Es un constructor similar para C#?

Respuesta

10

Hmm, no estoy seguro de si hay una manera más directa, pero esto debería funcionar

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

¿Qué tal:

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

Esto se basa en el día 1 del año 2009 se representa como 2009001 más bien 20091 sin embargo. Si es el último, es un poco más complicado (aunque todavía no es exactamente difícil, por supuesto).

Sin embargo, intentaría alejarme de ese formato bastante rápido: no es exactamente el mismo, y es completamente ilegible. Suponiendo que el formato "2009001" al menos se clasifica razonablemente, pero no se me ocurre mucho más a su favor.

+0

oh créeme, es por eso que lo estoy convirtiendo. Así es como nos lo están entregando. tomamos ese formato e importamos a nuestra base de datos, pero lo convertimos a un horario normal. Por cierto, me gusta tu respuesta. Me pareció que fue la primera respuesta, pero preferiría hacerlo en una línea. Supongo que es el Ruby en mí. Y yah, siempre está saliendo en un formato YYYYddd. – taelor

+0

por cierto, de hecho acabo de dar la respuesta a la otra persona. él solo tiene 4k en puntos, y quiero compartir el amor. – taelor

+0

No hay problema - No creo que perder 15 me duela demasiado :) –

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

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