字符串在 Windows Server 2016 上未被识别为有效的日期时间

string was not recognized as a valid Datetime on Windows Server 2016

我按以下方式创建了一个使用 DateTime.ParseExact 的应用程序:

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

extractedFileDate 正在存储带有日期的字符串,例如: "Tue Oct 08 12:07:13 2013"

当我 运行 我的应用程序在 Windows 10 上从我的计算机上运行时,一切都 运行 顺利,但是当我尝试 运行 [=] 上的相同应用程序时27=] Server 2016 我收到 "string was not recognized as a valid Datetime" 错误消息。

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

它会是什么?

大卫.

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

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

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

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

解决方案:

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