从包含小数和逗号毫秒分隔符的字符串转换为DateTime

本文关键字:分隔符 字符串 转换 DateTime 小数 包含 | 更新日期: 2023-09-27 18:10:19

给定以下两个字符串,请注意"。

  • 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();
     }
  }

从包含小数和逗号毫秒分隔符的字符串转换为DateTime

是。那么,具体的文化呢?

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

有什么解决方案吗?

是的。我的第一个想法是DateTime.ParseExact()/DateTime.TryParseExact()函数有一个重载,允许数组格式进行测试。您可以包括en-US改型和en-GB改型。但我认为这行不通,因为您仍然只能包含单个文化说明符。因此,我建议在将字符串传递给ParseExact函数之前调用. replace(),将字符串中可能存在的任何逗号更改为句点。

在你更新的示例代码,你的格式字符串只是不匹配你的示例日期。你应该这样做:

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

应该使用DateTime。如Hans Passant的评论中所建议的。ParseExact或。tryparseexact

DateTime d1;
string[] formats = new [] { "yyyy-MM-dd HH:mm:ss.fff", "yyyy-MM-dd HH:mm:ss,fff" };
DateTime.TryParseExact(s1, formats, CultureInfo.InvariantCulture, 
                    DateTimeStyles.None, out d1);

您还应该指定CultureInfo.InvariantCulture,否则ParseExact方法可能会使用特定于区域性的日期分隔符(代替/,例如: