从包含十进制和逗号毫秒分隔符的字符串转换为DateTime

use*_*969 4 c# string datetime

鉴于以下2个字符串,请注意".185"和",185"

  • 2011-09-15 17:05:37,185
  • 2011-09-15 17:05:37.185

从文件中读取(不在我的控制中),我可以看到它们都有两种格式的日期.我需要创建一个满足这两种情况的功能.

是' .'和' , '一种特定的文化?

有关这种功能的任何建议吗?

以下这个没有用,因为我没有约会.

 class Program
{
    static void Main(string[] args)
    {
        string date1="2011-09-15 17:05:37.185";
        string date2="2011-09-15 17:05:37,185";

        const string format1 = "dd/MM/yyyy HH:mm:ss.ff";
        const string format2 = "dd/MM/yyyy HH:mm:ss,ff";
        DateTime resultDate1;
        DateTime resultDate2;
        DateTime.TryParseExact(date1, format1, CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate1);
        DateTime.TryParseExact(date2, format2, CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate2);
         Console.WriteLine(resultDate1.ToString());
         Console.WriteLine(resultDate2.ToString());
         Console.Read();
     }
  }
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 8

是个 .而且,具体的文化?

是.在欧洲,通常使用逗号代替句点作为小数分隔符.

对解决方案的任何建议?

是.我的第一个想法是DateTime.ParseExact()/ DateTime.TryParseExact()函数有一个允许测试格式数组重载.您可以包含en-US变体和en-GB变体.除了我认为这不会起作用,因为你仍然只能包含一个文化说明符.因此,我建议在将字符串传递给ParseExact函数之前调用.Replace(),以将字符串中可能包含的任何逗号更改为句点.

在更新的示例代码中,您的格式字符串与您的示例日期不匹配.你应该用这个:

yyyy-MM-dd HH:mm:ss.fff