したがって、ユーザーから開始日と終了日を取得してグラフを作成しようとしています。私は日付の間に月の数を数える必要がありますし、各月の日数を計算し、月の名前も取得する必要があります。2つの日付間の月を計算し、毎月の計算日を計算する
2つの日付の間に月がありますが、残りをコードに変換できないようです。同様に、キッカーがたstartDateが月の途中である場合、それが結果リストに保存するべきであるということである
private List<MonthRange> GetRangeOfMonthsBetweenDates(DateTime startDate, DateTime endDate) {
List<MonthRange> result = new List<MonthRange>();
int months = (endDate.Year - startDate.Year)*12 + endDate.Month - startDate.month;
foreach(var m in months){
//get the start and end date of that month with the name and add it to the result list.
}
}
:私はMonthRange
と呼ばれるクラスpublic class MonthRange
{
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public string monthName { get; set; }
public MonthRange() {
}
public MonthRange(DateTime startDate, DateTime endDate, string monthName) {
this.startDate = startDate;
this.endDate = endDate;
this.monthName = monthName;
}
}
そして、私の方法を持っています終了日が月の途中であれば、それを保存する必要があります。私は少し失われており、どんな助けにも感謝します。
編集:これは私が達成しようとしているものの例です。私は、与えられた時間の範囲内で人が食べ物を食べた回数をプロットするグラフを作成しようとしています。
編集2:だから私はこの道を行くことになった:あなたが最初の日にすべてを変換するため
private List<MonthRange> GetRangeOfMonthsBetweenDates(DateTime startDate, DateTime endDate) {
List<MonthRange> result = new List<MonthRange>();
DateTime holder = startDate;
var months = (endDate.Year - startDate.Year) * 12 + endDate.Month - startDate.Month;
for (int i = 0; i <= months; i++) {
if (i == 0)
{
result.Add(new MonthRange(startDate, CalculateStartOfMonth(endDate), startDate.ToString("MMM")));
}
else if (i == months)
{
result.Add(new MonthRange(CalculateEndOfMonth(startDate), endDate, endDate.ToString("MMM")));
}
else {
DateTime middleMonth = holder.AddMonths(1);
result.Add(new MonthRange(CalculateStartOfMonth(middleMonth), CalculateEndOfMonth(middleMonth), middleMonth.ToString("MMM")));
}
}
return result;
}
private DateTime CalculateStartOfMonth(DateTime endDate) {
var startOfMonth = new DateTime(endDate.Year, endDate.Month, 1);
return startOfMonth;
}
private DateTime CalculateEndOfMonth(DateTime startDate)
{
var endOfMonth = new DateTime(startDate.Year, startDate.Month, DateTime.DaysInMonth(startDate.Year, startDate.Month));
return endOfMonth;
}
任意の例入力と出力を? – Mark
正しいものが正しいのですか?あなたが実際に入力した月の数として '1'を返したいのですか? 「Dec 31 2016 23:59」、「Jan 1 2017 00:01」をそれぞれ開始日と終了日としますか?あなたの説明の残りは同様に曖昧です。最初に、_precise_、_unambiguous_仕様書を書いて、実際にどの計算が正確に行われているかを詳述する必要があります。それで、コードは簡単に書くことができます。それがなければ、これを理解しようと数週間、あなたは円でさまようことができます。 –
@マークEg:ユーザーがstartDateを16/05/2017、endDateを24/07/2017と入力した場合。その後、月数は3になり、最初の月は開始日が16日、2月が全体、3月が24日に終了します。それは理にかなっていますか? – bluebrigade23