Convert.ToDateTime导致下午日期/时间值的FormatException

Sam*_*eff 11 .net c# datetime cultureinfo

我们有一个应用程序解析日期/时间值,格式如下:

2009-10-10 09:19:12.124
2009-10-10 12:13:14.852
2009-10-10 13:00:00
2009-10-10 15:23:32.022
Run Code Online (Sandbox Code Playgroud)

一个特定的服务器突然(今天)开始无法在13:00:00或更晚的时间解析.这个特定的客户端有五个服务器,只有一个有问题.我们有数十个其他客户端,总共有数百台服务器没有问题.

System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.DateTime.Parse(String s, IFormatProvider provider)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
at System.Convert.ToDateTime(Object value)
Run Code Online (Sandbox Code Playgroud)

我跑使用DateTime.Parse(S,CultureInfo.CurrentCulture)comapred到DateTime.Parse(S,CultureInfo.InvariantCulture),问题只显示了一个的CurrentCulture测试.但是,CurrentCulture就像所有其他服务器一样是"en-US",在区域或语言设置中没有什么不同.

谁看过这个吗?有关我可以研究的建议?

编辑:谢谢你到目前为止的答案.但是,我正在寻找有关可能导致这种情况突然改变行为并在其工作多年并在数百个其他服务器上工作时停止工作的配置的建议.我已经为下一个版本更改了它,但是我正在寻找配置更改以在当前安装的临时期间修复此问题.

Jon*_*eet 7

如果您完全了解格式,请告诉应用程序它是什么 - 使用DateTime.ParseExact而不仅仅是DateTime.Parse.(正如其他人所说的那样,也要指定不变的文化,以便带走任何更多的变异.)这可以让你获得更多的控制:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        Parse("2009-10-10 09:19:12.124");
        Parse("2009-10-10 12:13:14.852");
        Parse("2009-10-10 13:00:00");
        Parse("2009-10-10 15:23:32.022");
    }

    static readonly string ShortFormat = "yyyy-MM-dd HH:mm:ss";
    static readonly string LongFormat = "yyyy-MM-dd HH:mm:ss.fff";

    static readonly string[] Formats = { ShortFormat, LongFormat };

    static void Parse(string text)
    {
        // Adjust styles as per requirements
        DateTime result = DateTime.ParseExact(text, Formats, 
                                              CultureInfo.InvariantCulture,
                                              DateTimeStyles.AssumeUniversal);
        Console.WriteLine(result);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 3

我们也遇到了同样的问题。只需回收您的应用程序池即可。