字符串在 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);
我按以下方式创建了一个使用 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);