我有一個函式,每次呼叫時將日期遞減一天。
private IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
for (var day = thru.Date; day.Date >= from.Date; day = day.Subtract(TimeSpan.FromDays(1)))//day.AddDays(-1))
{
yield return day;
}
}
似乎作業正常,直到我到達上個月。如果有人有解決方案?
uj5u.com熱心網友回復:
我會使用這樣的東西
private IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
var days=(thru.Date - from.Date).Days;
if (days <= 0) yield return DateTime.MinValue;
else for (var day = days; day >= 0; day-=1)
yield return from.Date.AddDays(day);
}
測驗
var thru =new DateTime(day: 01,month:12, year:2021);
var from= thru.AddDays(-10);
EachDay(from,thru).Dump();
結果
2021-12-01
2021-11-30
2021-11-29
2021-11-28
2021-11-27
2021-11-26
2021-11-25
2021-11-24
2021-11-23
2021-11-22
2021-11-21
uj5u.com熱心網友回復:
盡管如此,您還是在對 Serge 的回答發表評論時說:
當我給出 01/12/2021 時,回應是 01/00/2021
我只是想指出,如果您的日期是 2021 年 1 月 12 日午夜,并且您dd/mm/yyyy在列印時不小心使用了日期格式,則可能會收到此資訊
mm是幾分鐘,而不是幾個月。MM是月.. 如果你使用mm00串接你的日期,你看到的是從 00:00:00 開始的分鐘,而不是月份
整個代碼中的所有內容可能都很好(對我來說似乎很好)并且您被 ToString 中的錯字誤導了
uj5u.com熱心網友回復:
在某種程度上,您在這里重新發明了一個輪子。你可以使用 Enumerable.Range 來做你的日期:
var f = // the date from eg DateTime.Now;
var t = // the date to eg DateTime.Now.AddDays(-45);
//this line of code generates the dates
var d = Enumerable.Range(0, 1 (int)((f-t).TotalDays)).Select(x => f.AddDays(-x));
在該日期d有沒有問題跨越邊界一個月
uj5u.com熱心網友回復:
終于得到了。我將值存盤在資料庫中,一段代碼導致從本機日期格式到法國日期格式的隱式轉換。我強制在所有代碼中使用本機日期格式,現在一切正常。
感謝您的答復
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/394783.html
