GetWeekOfYearメソッドを使用すると、DateTimeの表す日付に対応するISO週番号を取得することができます。 同様に、GetYearメソッドを使用するとISO週年(ISO週暦に基づく年)を取得することができます。
この2つのメソッドを用いることにより、ある日付がISO週暦での何年第何週であるかを求めることができます。
曜日(DayOfWeek列挙体)あるいはDateTimeからISO曜日番号を取得するメソッドは存在しないため、DateTime.DayOfWeekプロパティから得られる値を元に計算する必要があります。 (.NET 5の時点)
ISOWeek.GetWeekOfYear/GetYearメソッドで日付に対応するISO週番号・ISO週年を取得する
using System;
using System.Globalization;
class Sample {
static void Main()
{
var d = new DateTime(2020, 12, 26);
var ja = new CultureInfo("ja"); // 日本語のカルチャ
// 15日分の日付を変換する
for (var day = 0; day < 15; day++) {
Console.Write("{0} = ", d.ToString("D", ja)); // DateTimeを日付のみ・長い形式(ja/日本語)で文字列化
// ISO週年・週番号・曜日番号に変換して表示する
Console.WriteLine(
"ISO週暦 {0}年 第{1}週 第{2}日",
ISOWeek.GetYear(d), // DateTimeの日付を対応するISO週年に変換
ISOWeek.GetWeekOfYear(d), // DateTimeの日付を対応するISO週番号に変換
GetISOWeekdayNumber(d) // DateTimeの日付を対応するISO曜日番号に変換
);
d = d.AddDays(1); // 翌日のDateTimeを取得
}
}
static int GetISOWeekdayNumber(DateTime date) => date.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)date.DayOfWeek;
}
実行結果
2020年12月26日土曜日 = ISO週暦 2020年 第52週 第6日 2020年12月27日日曜日 = ISO週暦 2020年 第52週 第7日 2020年12月28日月曜日 = ISO週暦 2020年 第53週 第1日 2020年12月29日火曜日 = ISO週暦 2020年 第53週 第2日 2020年12月30日水曜日 = ISO週暦 2020年 第53週 第3日 2020年12月31日木曜日 = ISO週暦 2020年 第53週 第4日 2021年1月1日金曜日 = ISO週暦 2020年 第53週 第5日 2021年1月2日土曜日 = ISO週暦 2020年 第53週 第6日 2021年1月3日日曜日 = ISO週暦 2020年 第53週 第7日 2021年1月4日月曜日 = ISO週暦 2021年 第1週 第1日 2021年1月5日火曜日 = ISO週暦 2021年 第1週 第2日 2021年1月6日水曜日 = ISO週暦 2021年 第1週 第3日 2021年1月7日木曜日 = ISO週暦 2021年 第1週 第4日 2021年1月8日金曜日 = ISO週暦 2021年 第1週 第5日 2021年1月9日土曜日 = ISO週暦 2021年 第1週 第6日
この例で使用している、書式と書式プロバイダを指定した書式化については日時・文字列の変換と書式 §.書式とローカライズ、カルチャについてはカルチャの基本・種類・カルチャ情報の取得、日付と時刻の書式についてはカルチャと書式・テキスト処理・暦 §.日付と時間の書式 (DateTimeFormatInfo)を参照してください。