【问题标题】:Conversion from string "31/03/2012" to type 'Date' is not valid从字符串“31/03/2012”到类型“日期”的转换无效
【发布时间】:2011-12-18 05:18:09
【问题描述】:

我的网络应用程序在 asp vb.net 编辑器中运行良好。但是当我通过 IIS7 运行我的网络应用程序时,我得到了这个错误。我在配置 IIS7 时缺少什么?有没有人可以推荐一下?

提前致谢

【问题讨论】:

  • 你从哪里得到错误?堆栈跟踪是什么?
  • 你试过Convert.ToDateTime("31/03/2012")吗?
  • 在 2012 年 3 月 31 日使用 DateTime.Parse 将导致以下错误“System.FormatException:字符串未被识别为有效的 DateTime。”。不过,翻转 03 和 31 是可行的。
  • 显示您遇到错误的代码以及您尝试过的操作
  • 据我所知,日期时间转换取决于区域设置...尝试使用特定格式解析它

标签: asp.net vb.net iis datetime globalization


【解决方案1】:

因为您的 IIS7 配置为英语,并且该日期可能是意大利语或类似的。您必须告诉Date.Parse 使用哪种文化。

有点像

dateValue = Date.Parse(yourDate, CultureInfo.CreateSpecificCulture("it-IT"))

或者您可以更改 IIS7 中的文化

这里有instructions

例如,如果您使用 UI

使用 UI 打开 IIS 管理器并导航到您想要的级别 管理。 (省略)

在功能视图中,双击 .NET Globalization。

在 .NET 全球化页面的属性表中,单击以选择 要编辑的全局设置,然后从 下拉列表。

在“操作”窗格中,单击“应用”。

或者您可以在 web.config 中设置应用的文化

<system.web>
    <globalization culture="it-IT" uiCulture="it-IT"/>
</system.web>

【讨论】:

  • 区域设置可能设置为美国(“en-us”)。日期格式因地区而异,而不是因语言而异。
  • 感谢 xanatos,IIS7 调整在我的代码中解决了这个问题。
  • 我不能给这个答案足够的支持。我整个上午都在摆弄我的机器语言环境设置,试图弄清楚为什么这段代码突然在日期格式上卡住了。事实证明,即使我没有更改代码,我还是转移到了 IIS 托管。这不仅解决了我的问题,而且为我提供了多种解决方法。
【解决方案2】:

如果您确定日期始终采用该格式,则可以改用 ParseExact:

var date = DateTime.ParseExact(
               "31/03/2012",
               "dd/MM/yyyy",
               System.Globalization.CultureInfo.InvariantCulture);

【讨论】:

    【解决方案3】:

    您还可以使用 CDate 函数来解析日期。

    Dim dDate As Date = CDate("31/03/2012")
    

    与 DateTime 解析函数相比,使用此函数的优势在于,您可以为其提供任何可接受的日期字符串格式,并且它将对其进行转换。如果无法解析日期,则会抛出错误。

    【讨论】:

    • 但缺点是在"03/05/2011"等不明确的日期可能会得到不可预知的结果
    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多