【问题标题】:Subtract one month from Datetime.Today从 Datetime.Today 中减去一个月
【发布时间】:2015-01-05 09:53:33
【问题描述】:

我有一个DateTimePicker,我允许用户在其中选择当前年份的前一个月。

问题是,如果日期是 1 月 1 日,它无法像我现在这样计算去年的 12 月。

var today = DateTime.Today;

var lastmonth = new DateTime(today.Year, today.Month - 1, 1);
if (qs == "")
{
    dateTimePicker1.MaxDate = lastmonth;
    dateTimePicker1.Value = lastmonth;
}
else
{
    DateTime dt = Convert.ToDateTime(qs);

    dateTimePicker1.Value = dt;
    dateTimePicker1.MaxDate = lastmonth;
}

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    只需通过 'add` -1 减去一个月:

    var lastmonth = DateTime.Today.AddMonths(-1);
    

    请参阅DateTime.AddMonths 上的 MSDN 文档。

    【讨论】:

    • 有没有更好的方法来做到这一点。假设我有 3 个过滤器按钮,这些按钮可以获取前 1、6 和 9 个月的数据,它看起来有点难看(只是我还是其他人也这么认为?)有一堆负数通过AddMonths 方法。并且在代码中还有神奇的数字?谢谢
    【解决方案2】:

    帕特里克明白了。为了建立他的答案并改进错误处理(如果qs 可能是无效的日期字符串),您可以执行以下操作:

    DateTime qsValue;
    
    dateTimePicker1.MaxDate = DateTime.Today.AddMonths(-1);
    
    dateTimePicker1.Value = (DateTime.TryParse(qs, out qsValue))
        ? qsValue
        : dateTimePicker1.MaxDate;
    

    【讨论】:

      【解决方案3】:

      如果您像 Adil H. Raza 一样不喜欢在代码中使用负数,您也可以创建一个扩展方法:

      public static DateTime SubtractMonths(this DateTime dt, int months) => dt.AddMonths(-months);
      

      并像使用它一样

      var lastmonth = DateTime.Today.SubtractMonths(1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-04
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多