【问题标题】:Can you force values into the Date type?您可以将值强制转换为 Date 类型吗?
【发布时间】:2019-09-16 13:56:57
【问题描述】:

我遇到了一个错误,即权宜的解决方案是以某种方式强制将某些值放入Date 类型。

这将包括能够执行以下Dim myDate As Date = New Date(1900, 2, 29)

2 月 29 日是闰日,但 1900 年不是闰年,因此,这不是一个有效的日期,甚至不允许创建它。有没有办法用这些值创建它?

【问题讨论】:

  • 您在代码示例中写了1900,但在下面的文本中写了1990。您想支持/反对或合作哪个数字?
  • 问题是,你为什么要这么做?一个无效的日期对象的目的是什么?回答这些问题,有人可能会想出另一种方法。
  • 我已经有了另一种方法,用一周的时间重构一个遗留系统。只是想知道这是否可能。
  • 简短的回答是“否”,但理论上可能,不确定。文档说“年、月和日的允许值取决于日历。如果指定的日期和时间无法使用日历表示,则会引发异常。”那么通过更改日历可能会有一个非常糟糕的黑客行为? ;) 不推荐。

标签: vb.net date leap-year


【解决方案1】:

您不能将无效日期强制输入 System.DateTime。 看看这里:https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=netframework-4.8

您为什么不使用 Date.IsLeapYear(1900) 来检查您应该设置哪个日期值?

这里有两个例子:

    Dim myDate As Date
    Dim myYear As Integer = 1900
    If Date.IsLeapYear(myYear) Then
        myDate = New Date(1900, 2, 28)
    Else
        myDate = New Date(1900, 2, 29)
    End If

    Dim myDate2 As Date
    Dim myYear2 As Integer = 1900
    If Date.IsLeapYear(myYear2) Then
        myDate2 = New Date(1900, 3, 1)
    Else
        myDate2 = New Date(1900, 2, 29)
    End If

【讨论】:

    【解决方案2】:

    DateTime 基本上是一个数字的包装。您不能将错误的日期强制输入其中,就像您将错误的数字强制输入整数一样。它具有的任何值都表示某个有效日期。因此,即使您可以使用 new Date(1900, 2, 30) 并且没有出现异常,结果也不会是 1900 年 2 月 30 日,而是某个其他有效日期。

    【讨论】:

      【解决方案3】:

      DateTime 中有很多有趣的方法。

      Private Function GetLastDayInFebruary(YearToTest As Integer) As Integer
          Return Date.DaysInMonth(YearToTest, 2)
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多