2011-11-15 8 views
-1

私のStartYearは2009、FirstDayOfWeekです。月曜日、FirstWeekOfYearは最初の完全な週です。FirstDayOfWeekとFirstWeekOfYearを使用してStartDateを計算する

2009カレンダーの上記の基準に従って、第1週は実際には5日から開始します。 それでは、上記の条件(FirstDayOfWeekFirstWeekOfYear(カレンダールール))を使用してStartDateを取得するにはどうすればよいですか?それは一般的なものでなければならない。

+1

新規ユーザーは、単に投票ダウンしません。なぜ彼に学ぶチャンスを与えるのか説明してください。 – jgauffin

+0

"StartDate for the year"とはどういう意味ですか?毎年1月1日は同じです。1月1日が過ぎている曜日を探していますか? –

+0

@AnnaLear、StartDate of yearは2009年の例を挙げるとFirstDayOfWeekはmonday、FirstWeekOfYEarはFirst Full Weekですので、実際の週は1月5日から開始し、StartDateは2009年1月5日です。これを計算できる一般的な方法がいいでしょう。 – user936405

答えて

0

コードをもう一度更新しました。コードへ

public DateTime GetFirstDayOfFirstWeek(int year, CultureInfo culture) 
{ 
    // calc first date of this week 
    var firstDateOfWeek = new DateTime(year, 1, 10); 
    while (firstDateOfWeek.DayOfWeek != culture.DateTimeFormat.FirstDayOfWeek) 
     firstDateOfWeek = firstDateOfWeek.AddDays(-1); 

    // get current week number 
    int weekNum = culture.Calendar.GetWeekOfYear(firstDateOfWeek, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek); 

    // remove all weeks except the first one 
    return firstDateOfWeek.AddDays(7 - (weekNum * 7)); 
} 

var date = GetFirstDayOfFirstWeek(2009, new CultureInfo("sv-se")); 

注:私はまだCultureInfoを使用し、引数としてルールを取っていませんよ。これを行うことで、私はあなたに賛成しています:) .NETで組み込みのCulture機能を使用する方法を学ぶ必要があります。それはあなたが多くの時間を節約するのに役立ちます。

(あなたはまだ文化を使用したくない場合は、単にコードを修正)

+0

あなたのコードを再利用しましたが、CalendarルールをFull Week、FirstDayをmondayとして使用すると、間違った結果を返しています。 weekNumが52を返し、firstDayOfFirstWeekが間違った値を示しています。コードは以下のコメントにあります。 – user936405

+0

private static void GetFirstDayOfFirstWeek(int year、out DateTime firstDayOfFirstWeek、DayOfWeek firstDayOfWeek1、CalendarWeekRule cwr) { GregorianCalendar calendar = new GregorianCalendar(); var firstDateOfWeek =新しいDateTime(年、1、1); while(firstDateOfWeek.DayOfWeek!= firstDayOfWeek1) firstDateOfWeek = firstDateOfWeek.AddDays(-1); int weekNum = calendar.GetWeekOfYear(firstDateOfWeek、cwr、firstDayOfWeek1); firstDayOfFirstWeek = firstDateOfWeek.AddDays(7 - (weekNum * 7)); } – user936405

+0

これは間違って使用しています。入力した場合(年、日付など)、日付を取得するために使用しますか? – jgauffin

関連する問題