1

最終的に、私たちが作成したソフトウェアのクライアント向けに、多くの Web ベースのレポートをカスタム作成することになりました。私は開発に比較的慣れていないため、処理方法がわからない興味深い問題に遭遇しました。私は詳細を考え出しましたが、これを処理するためのより良い方法があると確信しています。また、誰かがこれに遭遇した場合は、今朝の作業の結果を共有できるようにしたいと考えていました. 私はコミュニティの生産的なメンバーになりたいと思っていますが、私の質問/回答/アプローチなどに関するフィードバックもお待ちしています.

レポートが生成され、ユーザーは開始日と終了日を指定できますが、レポートの生成全体を通して、日付範囲は複数の意味を持つ可能性があります。レポートの 1 つのセクターでは、入力された日付範囲が範囲内の月を取得します。これは、管理可能なチャンクに分割された DateTime 文字列から取得するのに十分簡単でした。他の領域では、範囲はそのように扱われ、取得されたデータはその範囲にわたって集計されます。私が遭遇した課題は、レポートのプレゼンテーションが毎週 (1901 年 1 月 1 日 - 1901 年 1 月 7 日) を示し、関連するデータの列がすべての週に続くように、データが週に基づいて集計されるレポートのセクターでした。選択した日付範囲で影響を受ける週。

4

1 に答える 1

1

問題を軽減するために私がしたことは、指定された日付を取得し、そこから組み込みの DateTimeFormat.FirstDayOfWeek を使用して「最初の」曜日の日付を計算し、その週の終わりの日付を 6 を追加して確立することでした。日付までの日数、日付を開始日と終了日としてデータテーブルにコミットし、1 つ追加して日付を次の週にプッシュします。

また、セットに必ず終了日があることを確認するために、入力された終了日とその週の計算された終了日を比較します。最終的に、これらの日付の減算は負の数またはゼロで終了します。これは、入力された終了日がその週に該当することを示します。 DataTable にコミットしただけです。これを行うためのより良い方法があると確信していますが、それでも機能します。これにより、20 分かかる時間で少なくとも 1 人が救われることを願っています。ありがとう!

String sBeginDate = "";//Given in input
String sEndDate = "";//Given in input
DateTime weekStartDate;
DateTime weekEndDate;
DataTable dtWeeksInRange = new DataTable();                
DataColumn dcWeekStart = new DataColumn("WeekStart");
DataColumn dcWeekEnd = new DataColumn("WeekEnd");        
dtWeeksInRange.Columns.Add(dcWeekStart);
dtWeeksInRange.Columns.Add(dcWeekEnd);
DayOfWeek firstday = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;        
     weekStartDate = Convert.ToDateTime(sBeginDate) ;

    do
    {            

      while (weekStartDate.DayOfWeek != firstday) 
           { 
              weekStartDate = weekStartDate.AddDays(-1); 
           }
        weekEndDate = weekStartDate.AddDays(6);
        dtWeeksInRange.Rows.Add(weekStartDate, weekEndDate);
        weekStartDate = weekEndDate.AddDays(1);            
    }
      while ((Convert.ToDateTime(sEndDate).Subtract(weekEndDate)).Days > 0);

foreach (DataRow dr in dtWeeksInRange.Rows)
    {
      //Outputting the set of dates to the page
        Response.Write(Convert.ToDateTime(dr["WeekStart"]).ToShortDateString() + 
        " - " + 
        Convert.ToDateTime(dr["WeekEnd"]).ToShortDateString() + 
        "<br />");
    }
于 2012-12-03T22:00:31.537 に答える