1 から 7 までの数値を、曜日を表す C# の DateTime オブジェクトに変換するにはどうすればよいですか? 数値は、解析中の XML ファイルから取得されています。日曜日から土曜日までの曜日を表す 1 から 7 までの数字を含むフィールドの各インスタンスを取得しています。
4 に答える
を取得するDateTime
には、平日が該当する特定の日付範囲が必要です (aDateTime
は特定の日時であり、平日はそうではないため)。
列挙がありDayOfWeek
ます (その値は実際には 0 ~ 6 の範囲です)。DayOfWeek
曜日を表すものだけが必要な場合は、 int をlike..にキャストできるはずです。
DayOfWeek myDay = (DayOfWeek)yourInt;
実際の が必要な場合DateTime
は、開始日が必要です。その後、次のことができます...
DateTime myDate = startDate.AddDays(
(int)startDate.DayOfWeek >= yourInt ?
(int)startDate.DayOfWeek - yourInt :
(int)startDate.DayOfWeek - yourInt + 7);
これにより、記述している曜日の次に発生するインスタンスの DateTime が得られます。
インスタンスは常に完全なDateTime
日付を表し、曜日のみを表すことはできません。実際の日付が重要でない場合は、任意の月曜日 (0 が月曜日を表すと仮定) を取り、その日の番号を追加します。
Int32 dayOfWeek = 3;
// date represents a thursday since 2009/04/20 is a monday
DateTime date = new DateTime(2009, 04, 20).AddDays(dayOfWeek);
それ以外の場合は、Adam Robinson の回答に同意します。曜日を保持したいだけの場合は、整数を使用する代わりにDayOfWeek 列挙型 (ゼロは日曜日) を使用してください。
DayOfWeek.Sunday はゼロなので、日曜日であることがわかっている任意の固定日付から始めて、0 から 6 までの値を追加できます。
public DateTime GetDayOfWeek(int dayOfWeek)
{
if (dayOfWeek < 0 || dayOfWeek > 6) throw new ArgumentOutOfRangeException(...);
// 4 January 2009 was a Sunday
return new DateTime(2009,1,4).AddDays(dayOfWeek);
}
なぜあなたがこれを望んでいるのかはわかりません。
次のように、ローカライズされた曜日のバージョンのみを取得する場合:
GetDayOfWeek(3).ToString("dddd"); // Gets name of day of week for current culture
別の方法は、必要なカルチャに DateTimeFormatInfo.DayNames または DateTimeFormatInfo.AbbreviatedDayNames を使用することです。