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

4

给定以下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();
     }
  }

4
请使用DateTime.TryParseExact()方法。 - Hans Passant
2
我认为句点和逗号是文化特定的。 - Ahmed
我编辑了问题,但我根本没有得到日期。 - user9969
@user231465,这只是粗心大意。dd/MM...2011-09...不匹配。 :) - bzlm
@bzlm。写得很快。我正在阅读一个不在我的控制范围内的文件,date1和date2是它在这个文件中的写法。你有什么建议最好的读取这些日期吗? - user9969
2个回答

8

“.”和“,”是特定于文化的吗?

是的。在欧洲,逗号通常用作小数分隔符,而不是句点。

有解决方案的建议吗?

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

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

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


谢谢您的回复。我已经用一个例子编辑了我的问题。我做错了什么? - user9969
@JoelCoehom。谢谢。阅读文章并提供了建议dateFormat。谢谢 - user9969
1
@user231465,在编写 @ 回复时,请使用制表符自动完成。 :) - bzlm

3
你应该使用Hans Passant评论中建议的DateTime.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 方法可能使用特定于文化的日期分隔符(例如,在德国使用“.”代替 /)或时间分隔符(例如,使用“:”代替)。


谢谢。在阅读了之前回答中建议的文章后,我按照您的建议做了。 - user9969

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接