【问题标题】:How can I determine the last day of the month [duplicate]如何确定本月的最后一天[重复]
【发布时间】:2015-04-20 19:39:36
【问题描述】:

当用户在文本框中输入的日期距离该月可用的最后一天更远时,如何确定测试月份的最后一天?另外,我如何将其反馈给用户。

当用户输入日期时,例如 2015 年 4 月 31 日,日期应自动更改为 2015 年 4 月 30 日。

我想尝试使用 c# 来做这件事

【问题讨论】:

  • 用户以什么格式输入日期?为什么不使用DateTimePicker
  • 4 人赞成关于重复的评论,但没有人投票关闭作为重复?除此之外,这个问题的核心问题似乎是检测用户是否输入了无效的日期时间但格式有效。

标签: c#


【解决方案1】:

第三次编辑:下面将让您接近您的要求,但实际上只是使用日期选择器控件,它将有助于防止大多数无效日期并为您节省大量资金开发时间

第二次编辑:所以 TryParse 是有益的,因为如果日期有效,请继续并完成。如果您有一个无效的日期,TryParse 会告诉您,那么您可以比较输入的日期值,看看它离月底有多近,即取 31 - 30 = 1, 1 个数字所以他们可能意味着 30

编辑:要回答有关查找无效日期的问题,请查看:Validate a DateTime in C#

它显示了如何检测无效日期。

要回答您关于如何“猜测”它们最接近哪个验证日期的问题,我想说这取决于您输入日期的方式。如果您执行类似让他们为日期值输入一个 int 值的操作,我会检查所选月份的最高日期值是多少,然后查看它们最接近哪一个(此时这只是一个数学运算)。

我认为这会奏效

DateTime lastday = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month));

【讨论】:

  • 但是如果减去一天,如何检测用户输入的无效日期是否有效?问题的难点在于解析无效的日期。
  • DateTime.TryParse 无助于解决这个问题,因为日期无效,但如果日期是 30 而不是 31,则可以解析。
  • 您越来越近了,但仍然难以以编程方式检测无效日期时间的日期部分是否可能是您可以修复的未来日期。除了他根本不应该允许无效日期或使用DateTimePicker这一事实之外,这是一个有趣的问题。
  • 是的,但我个人没有想法,你对解决这个问题有什么想法?
  • 我已经开始编写一种适用于任何可能格式的方法,但我停止了,因为我注意到它变得非常复杂并且容易失败。所以在我看来,他不应该允许用户输入无效的日期(或使用 DateTimePicker)。 “修复”无效输入通常是错误的,尤其是因为用户可能甚至没有注意到他通过默默地“修复”他输入了不正确的内容。也许他输入了错误的月份,所以 31 是正确的但不是四月。
【解决方案2】:

这是一个简单的方法:

//first day of next month
var dt = new DateTime(2015,4,1);
var lastDayOfMonth = dt.AddDays(-1).Day;

就向用户传递信息而言,这取决于环境、技术和首选方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2021-12-24
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多