8

我有一些我必须解析的旧日志文件 - 显然日期时间保存为:18/12/2012 11:09:39 pm - 我所有解析这些文件的尝试都失败了。我对此完全迷失了 - 任何帮助或指导都会很棒!

 CultureInfo cultureInfo = new CultureInfo( "es-MX" , true );
        string date = "18/12/2012 11:09:39 p.m.";

        DateTime dt = new DateTime( 2012 , 12 , 18 , 11 , 9 , 39 ).AddHours( 12 );

        this.richTextBox1.Text += date + Environment.NewLine;
        this.richTextBox1.Text += dt.ToString( cultureInfo ) + Environment.NewLine;
        this.richTextBox1.Text += dt.ToString() + Environment.NewLine;

        foreach ( var item in richTextBox1.Lines )
        {
            try
            {
               DateTime d=  DateTime.Parse( item );
               this.richTextBox1.Text += d.ToString() + Environment.NewLine ;

            }
            catch ( Exception ee)
            {
                this.richTextBox1.Text += ee.Message + Environment.NewLine ;

            }
        }
4

4 回答 4

3

Some dates are correct in the log file(s) some have the odd formatting that end in p. m. or p.m.. All methods above seem to fail - and yes I tried them all :( This was my hack/fix for the problem:

     CultureInfo cultureInfo = new CultureInfo( "es-MX" , true );
     Date = DateTime.Parse( date.Replace( "p. m." , "PM" ).Replace( "p.m." , "PM" ).Replace( "." , "" ).ToUpper() , cultureInfo );
于 2013-04-22T15:40:46.267 回答
2

尝试使用 DateTime.TryParseExact()。这是我在 LINQPad 中运行的示例。

void Main()
{
    System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo( "es-MX" , true );
    string date = "18/12/2012 11:09:39 p.m.";

    DateTime dt = new DateTime( 2012 , 12 , 18 , 11 , 9 , 39 ).AddHours( 12 );

    DateTime d;
    string[] styles = {"dd/MM/yyyy hh:mm:ss tt"}; // This doesn't have to be an array - could be string
    DateTime.TryParseExact(date, styles, cultureInfo, System.Globalization.DateTimeStyles.None, out d);

    d.Dump();
}
于 2013-04-19T20:57:09.240 回答
0

尝试使用您的cultureInfo 变量作为Parse 的第二个参数。这将使用文化作为格式提供者。

DateTime d =  DateTime.Parse( item, cultureInfo );
于 2013-04-19T21:37:13.647 回答
0

问题是您没有指定在调用 Parse() 时要使用的文化。您的调用使用当前线程的 CurrentCulture 属性:

DateTime d=  DateTime.Parse( item );

你需要的魔法咒语是这样的:

DateTime instance = DateTime.Parse( text , CultureInfo.GetCultureInfo("es-MX") ) ;

您的另一种选择是更改当前线程的文化:

CultureInfo mexico = CultureInfo.GetCultureInfo( "es-MX" );
Thread.CurrentThread.CurrentCulture = mexico;

在你打电话之前DateTime.Parse()。在启动时执行此操作,您应该一切顺利(只要在墨西哥西班牙语中工作对您的目的有益。请注意,更改当前文化不会改变事物的显示方式:这是线程的 CurrentUICulture 属性的责任。

于 2013-04-19T21:45:02.343 回答