【问题标题】:String to date exception on certain computer某些计算机上的字符串到日期异常
【发布时间】:2013-02-10 16:25:28
【问题描述】:

我编写了检查代码以确保用户以 dd/MM/yyyy 格式输入日期。但是,它在某些计算机上不起作用,抛出异常。但是,它在我的计算机上运行时运行良好。这是为什么?是我做错了还是我需要在电脑上进行一些设置。

  Try
     checkDate = "24/02/2013"
     selectedDate = DateTime.ParseExact(checkDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)

  Catch ex As Exception
     lblError.Text = "Invalid Date."

  End Try

【问题讨论】:

  • 异常情况是什么?
  • 由于它只出现在某些计算机上,因此问题可能是由不同的文化引起的。如果您查看 MSDN 文档,您会发现他们在示例代码中使用“d”作为格式来解析日期。
  • @Hanno 从理论上讲,文化应该不是问题,因为文化和格式已明确指定。
  • 感谢大家的 cmets。我如何改变文化?我将区域和语言设置设置为与我的计算机相同,但它仍然无法正常工作。我需要回到电脑上看看打印了什么异常。但它很奇怪,我的朋友和我的电脑运行良好,但我们部署应用程序的桌面似乎不允许我们在 dd/MM/yyyy 中解析它。是否有其他方法可以检查输入的日期是否为 dd/MM/yyyy 格式?
  • @StevenDoggart 我知道,但这很可疑,我没有看到任何其他潜在问题。 @ user2107475 如果您检查诸如“01/01/2013”​​之类的日期会发生什么? (切换日/月不成问题)

标签: asp.net vb.net datetime


【解决方案1】:

您的 formatProvider(ParseExact 的 3° 参数)应与您使用的格式匹配,在您的情况下这可能是错误的。 InvariantCulture 不是“万能”的文化;这是一种不会改变的文化,当您持久/检索日期时间而不向用户显示它们时,您可以依赖它。 我认为(我现在不能尝试)你应该这样做:

 checkDate = "24/02/2013"
 Dim dtfi As New DateTimeFormatInfo()
 dtfi.ShortDatePattern = "dd/MM/yyyy"
 selectedDate = DateTime.ParseExact(checkDate, "dd/MM/yyyy", dtfi)

【讨论】:

    【解决方案2】:

    在您的 page_load 中使用它可能会起作用..

    Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-US")
    Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")
    

    当然,根据您的文化偏好更改 en-US

    【讨论】:

      【解决方案3】:

      不知道怎么回事,我重新上传应用程序,错误就消失了。奇怪。

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多