Порядковый Формат Даты C#

проблема:

вам даются даты в формате YYYYddd, который является годом, за которым следует день года, с 1 по 365 (366). Например, сегодня будет 2009135 (5/15/2009).

каков наилучший способ создания нового datetime из этого? В Ruby, я знаю, что есть конструктор, который принимает два числа вот так

Date.ordinal(2009, 135)

есть ли аналогичный конструктор для C#?

3 ответов


Хм, я не уверен, что есть более прямой способ, но это должно работать

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

Как насчет:

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

Это зависит от того, что День 1 2009 представлен как 2009001, а не 20091. Если это последнее, это немного сложнее (хотя, конечно, все еще не совсем сложно).

Я бы попытался отойти от такого формата довольно быстро, хотя - это не совсем обычный, и он совершенно не читается. Предполагая формат "2009001", он, по крайней мере, сортируется разумно, но я не могу думать о многом другом в его пользу.


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

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