gpt4 book ai didi

c# - 如何使日期时间选择器始终包含月份的最后一天,同时仅显示月份和年份?

转载 作者:太空狗 更新时间:2023-10-29 20:25:04 27 4
gpt4 key购买 nike

我有一个 DateTimePicker,我已将其设置为仅显示月份和年份,如下所示:

myDateTimePicker.Format = DateTimePickerFormat.Custom;
myDateTimePicker.CustomFormat = "MMMM yyyy";
myDateTimePicker.ShowUpDown = true;

但是,我希望日期的值始终是所选月份的最后一天,因此我使用以下方法在 ValueChanged 事件中设置 DateTime:

DateTime selectedDate = myDateTimePicker.Value;
DateTime lastDayOfMonth = new DateTime(
selectedDate.Year,
selectedDate.Month,
DateTime.DaysInMonth(selectedDate.Year, selectedDate.Month));
myDateTimePicker.Value = lastDayOfMonth;

问题是,如果我选择了像三月这样的月份,并且使用向上/向下控件将月份更改为二月,那么在我可以处理 ValueChanged 事件之前会收到以下错误:

ArgumentOutOfRangeException was unhandled
Year, Month, and Day parameters describe an un-representable DateTime.

这是可以理解的,因为日期是 3 月 31 日,现在更改为 2 月 31 日,这是一个无效日期。但是,我想将其更改为 2 月 28 日(或 2 月 29 日)。

我怎样才能做到这一点?

最佳答案

很奇怪,我试图重现你的问题,当我从三月切换到二月时,我的控件只是不显示任何东西......也许我们有不同的框架版本,他们以不同的方式处理相同的错误。

无论如何,一个解决方案是将日期时间选择器设置为每个月的第一天,当您需要该值时,您可以直接使用当前的代码:

DateTime lastDayOfMonth = new DateTime(
selectedDate.Year,
selectedDate.Month,
DateTime.DaysInMonth(selectedDate.Year, selectedDate.Month));

由于您从不使用 dattime 选择器的日期值,您可以将其设置为 1,这将始终提供现有日期。

这个解决方案不知何故让我有一种不好的感觉,因为您使用的日期与您从控件中获得的日期不同——IMO,这总是可能的错误来源。请记住在您的代码中添加注释,解释您这样做的原因 ;-)

关于c# - 如何使日期时间选择器始终包含月份的最后一天,同时仅显示月份和年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com