2

1 から 7 までの数値を、曜日を表す C# の DateTime オブジェクトに変換するにはどうすればよいですか? 数値は、解析中の XML ファイルから取得されています。日曜日から土曜日までの曜日を表す 1 から 7 までの数字を含むフィールドの各インスタンスを取得しています。

4

4 に答える 4

1

を取得する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 が得られます。

于 2009-04-20T17:57:59.440 に答える
1

インスタンスは常に完全な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 列挙型 (ゼロは日曜日) を使用してください。

于 2009-04-20T17:58:57.470 に答える
1

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 を使用することです。

于 2009-04-20T18:00:06.627 に答える