【问题标题】:C# winforms datetime picker maxdateC# winforms 日期时间选择器 maxdate
【发布时间】:2016-05-18 11:09:10
【问题描述】:

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

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

现在我的问题是当两种数据类型兼容时(日期时间),为什么这些是 Datetimepicker 中的限制。这似乎是设计使然。谁能告诉我为什么这个限制以及这个设计功能将如何提供帮助?

谢谢

【问题讨论】:

    标签: c# datetime datetimepicker


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我知道用户不会推到这样的未来日期。它是关于一个应用程序,其中结束日期在 SQL Server 中设置为 Max date,并且需要将其呈现给 UI 中的日期时间选择器。
    【解决方案2】:

    就像 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2017-02-16
      • 1970-01-01
      • 2016-04-16
      相关资源
      最近更新 更多