2011-12-06 11 views
0

指定されたバイトの倍数(dataSlots)で循環ログにデータを保存していますが、基準日からの経過日数に基づいて週数を計算しています。1年に52.17週間あります。今週のC#での計算方法を教えてください。

DateTime startDate = DateTime.UtcNow; 
for (int ii = 0; ii < 900; ii++) 
{ 
    currentDate = startDate + new TimeSpan(7 * ii, 1, 1, 1, 1) 
    DateTime globalStartReference = new DateTime(2011, 12, 1, 0, 0, 0, DateTimeKind.Utc); 
    var span = currentDate - globalStartReference ; 
    int dataSlot = 0; 
    dataSlot = (span.Days * 7)/52; 
    Console.WriteLine(dataSlot); 
} 

私の希望は、現在の週に基づいてdataSlotがますます増えていくことですが、そうではありません。私はこれらの週に

11 
28 
44 
60 
77 
88 
109 

は、なぜ私は、重複週間取得していますし、どのように私はこれを考慮ん重複したエントリを取得する(したがって、私のデータを上書きしますか)?私の推測では、1年に数分の1の週があるということです。

答えて

1

あなたは今年の週を取得しようとしていますか?あらかじめ定義された開始日の広告の無限のように見えます。適切なカレンダーを使用してそれを使用すると、特定の日付に基づいて特定の週を取得できますが、任意の日付からx週は取得できません。など

プラスあなたは部分的週、うるう年を考慮する必要があり、

+0

週の決定にはどのような方法がありますか?私はDateTimeの下でそれらを見ることはありません。私は、指定された開始日(固定、システム定義かどうか)からユーザーが指定した終了日までのすべての週の合計を取得する必要があります。 – LamonteCristo

+0

これは、おそらくCalendarクラスに関係しますが、http://stackoverflow.com/questions/1083955/how-to-get-difference-between-two-dates-in-year-month -week-day –

5

Calendar.GetWeekOfYear methodは役に立つかもしれません。任意の参照日付は許可されませんが、自分で調整することもできます。

+0

これは正しい方法かもしれません。 – LamonteCristo

0

ベースラインから何週間も心配しているのであれば、年は入力されません。ちょうど7日間の増分です。

それ以外の場合は、年と週があります。 @ BACONの答えはおそらくこれに適しています。オーバーラップが少しあります - Y2W1はY1W52と同じカレンダーを共有することがあります。あなたがその週53を追加して作るのであればDunnoですが、これは長く行くほど問題になります。