C# winforms 日期时间选择器 maxdate

C# winforms datetime picker maxdate

SQL 服务器和 C# 中日期时间数据类型接受的最大日期似乎是 31/12/9999 23:59:59。我试图将数据值 (01/01/9999 00:00:00) 从数据库分配给日期时间选择器。说

失败

DateTimePicker 不支持 31/12/9998 之后的日期00:00:00。
参数名称:MaxDate

现在我的问题是当两种数据类型兼容时(日期时间),为什么这些在 Datetimepicker 中是限制性的。这似乎是设计使然。任何人都可以告诉我为什么这个限制以及设计中的这个功能会有什么帮助吗?

谢谢

在正常操作中,日期时间选择器必须能够显示所选日期之后的日期。这意味着如果您选择最大日期(9999 年 12 月 31 日),那么 理论上 它必须显示 10,000 年 1 月 1 日 - 它不能。

因此选择器本身将初始值限制为某个任意值最大日期之前,以便可以显示后续日期。

我不认为这是个问题。在现实世界的应用程序中,用户何时会想要设置 7000 多年后的日期?

如果您的应用程序有未设置的日期,那么您可能需要考虑将它们作为 null 存储在数据库中(即使该列可为空),以便它在 UI 中显示为空白。这实际上可能使用户更容易发现尚未设置的日期。

就像 DateTimePicker 检查一样简单

DateTimePicker.MaximumDateTime

定义为 9998 年 12 月 31 日

这是来自参考资料的相关部分

public DateTime Value {
            set {
                bool valueChanged = !DateTime.Equals(this.Value, value);
                // Check for value set here; if we've not set the value yet, it'll be Now, so the second
                // part of the test will fail.
                // So, if userHasSetValue isn't set, we don't care if the value is still the same - and we'll
                // update anyway.
                if (!userHasSetValue || valueChanged) {
                    if ((value < MinDate) || (value > MaxDate)) {
                        throw new ArgumentOutOfRangeException("Value", SR.GetString(SR.InvalidBoundArgument, "Value", FormatDateTime(value), "'MinDate'", "'MaxDate'"));
                    }
}

MaxDate 检查 DateTimePicker.MaximumDateTime

http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DateTimePicker.cs,040fca665238ae30