【问题标题】:how to check entered date should be greater than system date in vb.net如何检查输入的日期是否应大于 vb.net 中的系统日期
【发布时间】:2013-12-11 12:13:44
【问题描述】:

这是问题所在,我以以下格式传递一个日期:mm/dd/yyyy。 当我将日期作为 02/02/2010 传递给函数时,它总是返回 true,但我设置了条件,如果日期小于系统日期,它应该返回 false,但对于输入的日期小于系统日期,它仍然返回 true。这里函数。

Private Function expiryvalidate(ByVal exp As String) As Boolean
    Dim ee As String
    ee = Format(CDate(exp), "MM/dd/yyyy")
    Dim dd As String = Format(DateTime.Now, "MM/dd/yyyy")
    If ee <> "0" Then

        If ee < dd Or ee = dd Then
            Return False
        Else
            Return True

        End If
    Else
        Return True
    End If
End Function

【问题讨论】:

  • 我同意你得到的两个答案;无论如何,请记住,您声称的内容根本不会反映在您的代码中。如果您输入 exp = "02/02/2010",则条件 If ee
  • @varocarbas:我做了调试..两种日期格式都是一样的..但它仍然不起作用。
  • 它适用于我(VS 2010,.NET 4.0)。无论如何,如上所述,您不应该将日期作为字符串处理。
  • @varocarbas 是的,亲爱的......现在当我将它作为日期处理时,它的工作正常......好吧字符串和日期不是为彼此制作的:D
  • 请阅读我的 cmets:您必须将日期视为日期(没有但,没有讨论;否则您编码错误)。但是我测试了你的代码(处理字符串),它工作正常。

标签: vb.net windows winforms function user-defined-functions


【解决方案1】:

如果您可以将日期作为Date 类型传递,那么它就是这样:

Private Function expiryvalidate(ByVal myDate As Date) As Boolean
    Return myDate < Today
End Function

http://msdn.microsoft.com/en-us/library/system.datetime.today%28v=vs.110%29.aspx

如果作为参数传递的日期小于当前系统日期,则返回true,否则返回false。

如果您需要将日期作为字符串传递给函数,那么您可以这样调用它:

dim IsExpired as boolean = expiryvalidate(date.parse("mystringdate"))

【讨论】:

  • :我会检查一下。
  • 嗨我修改了你的代码并添加了这个现在可以工作 If exp > Today Or exp Today Then Return True Else Return False End If
  • @vimal vasudevan 您正在检查错误的条件,您正在检查日期是否更大以及是否不同,但如果日期不同,那么您可以假设日期小于或大于今天,本质上是不同的,在添加最后一个条件后,你的表达式正在检查这个:if exp is greater or is lower than date... 所以你只需要执行一个条件:Return exp &lt;&gt; Today 并删除if exp &gt; date... PS:对不起我的英语不好。
  • 但是 OP 声称有问题,他的原始代码(虽然形式上很糟糕,但)运行良好。
  • @elektrostudios 我实际上需要检查日期是否小于或等于当前日期..如果它小于或等于当前日期,那么它应该返回 false...否则为 true
【解决方案2】:

比较两个字符串假装它们应该被视为日期在任何情况下都不能很好地结束。

您应该将输入字符串转换为日期,然后与DateTime.NowDateTime.Today 进行比较。通过这种方式,编译器知道如何正确比较表示日期的值,而不会对日期的实际显示格式产生任何问题

Private Function expiryvalidate(ByVal exp As String) As Boolean
    Dim ee As DateTime
    Dim culture = CultureInfo.CreateSpecificCulture("en-US")
    Dim DateTimeStyles styles = DateTimeStyles.None;
    if DateTime.TryParse(exp, culture, styles, out ee ) Then
        if ee <= DateTime.Now Then
           Return True
        else
           Return False
    Else
        Return False
    End If
End Function

当然,如果您已经有要检查的日期时间,这将毫无用处。
在这种情况下,检查可以内联完成,无需调用函数

if currentDate <= DateTime.Now Then 
   ......

【讨论】:

  • 谢谢史蒂夫..我用 ElektroStudios 回答我自己的修改..我必须将它作为日期参数传递,所以现在它可以工作了。
  • 但是 OP 声称有问题,他的原始代码(虽然形式上很糟糕,但)运行良好。
  • @varocarbas,不,我认为原始代码无法正常工作。如果今天是 2013 年 10 月 6 日,而作为测试通过的日期是 2014 年 9 月 6 日怎么办? (应该可以接受,但是九月(09)低于十月(10),字符串比较失败)
  • 嗯,世界上到处都是以不同方式思考的不同人。当我看到某些行为时,我不再感到惊讶(相信我,作为意大利人,我已经看到了其他人仍然必须看到的东西:)),但我在这里离题了。是的,现在我明白你所说的“工作正常”是什么意思了。在 SO 上再见。
  • (LOL) 请记住,意大利和西班牙是同父异母的兄弟。回头见。
猜你喜欢
  • 2012-01-03
  • 2016-03-06
  • 2021-07-12
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多