2009-05-15 20 views
6

Problem:porządkowa Data Format C#

Dostaniesz daty w formacie YYYYddd, który jest rok, a następnie przez cały dzień roku, od 1 do 365 (366). Na przykład dzisiaj byłby 2009135 (5/15/2009).

Jaki jest najlepszy sposób utworzenia nowej daty z tego? W Ruby Wiem, że istnieje konstruktor, który pobiera dwie liczby tak jak

Date.ordinal(2009, 135) 
Czy są podobne konstruktora dla C#?

Odpowiedz

10

Hmm, nie jestem pewien, czy istnieje bardziej bezpośredni sposób, ale to powinno działać

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

Jak o:

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

ta opiera się na dzień 1 z 2009 roku są reprezentowane 2009001 raczej 20091. Jeśli jest to drugie, to jest nieco trudniejsze (choć nadal nie jest dokładnie twarde, oczywiście).

Postaram się jednak dość szybko odejść od takiego formatu - nie jest to typowe i jest całkowicie nieczytelne. Przyjmując format "2009001", to przynajmniej sortuje rozsądnie, ale nie mogę myśleć o wiele więcej na jego korzyść.

+0

och, zaufaj mi, właśnie dlatego to nawracam. Tak właśnie jest nam przekazywany. przyjmujemy ten format i importujemy do naszej bazy danych, ale przekształcamy ją w zwykłą datę. Btw, podoba mi się twoja odpowiedź. Uderzyło mnie, że robię to jak pierwszą odpowiedź, ale wolałbym to zrobić w jednym wierszu. Odgadnij jej Ruby we mnie. I tak, zawsze wychodzi w formacie RRRRDD. – taelor

+0

btw, właśnie dałem odpowiedź drugiej osobie. ma tylko 4 000 punktów i chcę podzielić się miłością. – taelor

+0

Nie ma problemu - nie wydaje mi się, żeby przegrana 15 za bardzo mnie zraniła :) –

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

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