【问题标题】:string was not recognized as a valid Datetime on Windows Server 2016在 Windows Server 2016 上,字符串未被识别为有效的日期时间
【发布时间】:2019-08-27 21:01:29
【问题描述】:

我通过以下方式创建了一个使用 DateTime.ParseExact 的应用:

DateTime.ParseExact(extractedFileDate, "ddd MMM dd HH:mm:ss yyyy", CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None);

extractedFileDate 存储一个带有日期的字符串,例如: “2013 年 10 月 8 日星期二 12:07:13”

当我在 Windows 10 上从我的计算机运行我的应用程序时,一切运行顺利,但是当我尝试在 Windows Server 2016 上运行相同的应用程序时,我得到“字符串未被识别为有效的日期时间”错误消息。

日期字符串的内容显示的是相同的值。

会是什么?

大卫。

【问题讨论】:

  • 请注意ddd 不是“3 字母缩写”的意思,它只表示“缩写”,在我的文化中缩写后面是句号,当然是用挪威语写的.您的服务器/应用程序在哪种文化下运行?
  • 服务器正在运行,我的桌面是 en-us
  • he-il 是从右到左的文化,该格式对该文化无效,它使用不同的缩写。具体来说,今天,星期二,该文化中的缩写日是 5 个字母长,用希伯来语写成。如果要解析英文日期,则必须使用与英文兼容的文化。现在在 en-GB 文化中的时间是 Tue Aug 27 13:41:14 2019,您拥有的格式,但对于 he-IL,它是“2019 13:41:31 27 יום ג אוג”(并且 Stack Overflow 对权利-to-在这里混合)

标签: c# datetime unhandled-exception


【解决方案1】:

一种文化有DateTimeInfo,其中包含有关如何解析字符串的特定信息。例如,一年中各月份的星期几的名称。

您的格式字符串包含ddd MMM 和您要解析的字符串Tue Oct,因此当服务器配置了另一种文化时,这可能是问题。

您正在使用CultureInfo.CurrentCulture。解析字符串时尝试使用您的桌面文化。

更新:在您的评论中,您询问如何支持多种文化。在数据传输或存储的情况下,最好的方法是在(反)序列化DateTime 时使用CultureInfo.InvariantCulture。这种文化独立于当地环境。向用户展示时(在 GUI 中)使用默认的(用户配置的)文化。

【讨论】:

  • 如何让我的代码支持多种文化?我的桌面显示 en-us 而服务器显示 he-il
  • 您首先必须确定“支持多种文化”是什么意思。如果您有英语格式的日期,则需要使用与英语兼容的文化。
【解决方案2】:

解决方案:

DateTime.ParseExact(extractedFileDate, "ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);

【讨论】:

  • @DavidGidony 只要确保其他系统不再在he-IL 中使用,也使用不变文化发送。否则会发生另一个不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多