問題:
日付は YYYYddd の形式で与えられます。これは年であり、その後に 1 ~ 365(366) の年間通算日が続きます。たとえば、今日は 2009135 (2009 年 5 月 15 日) になります。
これから新しい日時を作成する最良の方法は何ですか? Rubyでは、そのような2つの数値を取るコンストラクターがあることを知っています
Date.ordinal(2009, 135)
C# 用の同様のコンストラクターはありますか?
うーん、もっと直接的な方法があるかどうかはわかりませんが、これはうまくいくはずです
new DateTime(year, 1, 1).AddDays(day - 1);
どうですか:
new DateTime(ordinal / 1000, 1, 1).AddDays((ordinal % 1000) - 1);
ただし、これは 2009 年 1 日が 20091 ではなく 2009001 として表されることに依存しています。後者の場合は、少しトリッキーになります (もちろん、厳密には難しいわけではありませんが)。
私はそのような形式からかなり早く離れようとします. 「2009001」形式を想定すると、少なくとも合理的にソートされますが、他に有利なものはあまり思いつきません。
int year = 2009;
int month = 1;
int day = 1;
int dayOfYear= 135;
DateTime myDate = new DateTime(year, month, day);
myDate.AddDays(dayOfYear - 1);