【问题标题】:How to convert a date string to a DateTime object in C#? [duplicate]如何在 C# 中将日期字符串转换为 DateTime 对象? [复制]
【发布时间】:2015-11-20 05:16:02
【问题描述】:

我有一个解析日期字符串的方法

public static DateTime ParseDateTime(string dateString)
{
        DateTime dateTime;
        if (!DateTime.TryParse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out dateTime))
        {
            try
            {
                dateTime = DateTime.Parse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
            }
            catch (FormatException)
            {
                ...
            }

        dateTime = dateTime.ToUniversalTime();
        return dateTime;
}   

但是在输入中我可以有不同的格式,例如,如果我在我的 GUI 中将日期格式更改为 d/MM/yyyy(澳大利亚和英国语言环境),那么我将拥有 System.FormatException Additional information: String was not recognized as a valid DateTime.

我该如何处理这两种情况?

【问题讨论】:

    标签: c# .net datetime


    【解决方案1】:

    您需要使用ParseExact 方法而不是Parse 并根据您使用的格式提供格式字符串。

    如果需要同时处理多种格式,可以在formats[]数组中指定多种格式。

    【讨论】:

    • 你能提供一个代码吗?我现在不知道如何在 DateTime.ParseExact() 方法中放置多种格式?
    • 你看过我发布的链接内容了吗?文末有例子。
    • 是的,在 MSDN 中,所有格式都以 M 开头,但英国区域设置为 d/MM/yyyy。在哪里可以找到所有格式的列表?
    • @Anatoly 没有“所有可能的格式列表”之类的东西,因为您可以使用自定义格式说明符自己构造格式字符串。看看这里:msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
    • 我可以有 DateTimeStyles.AssumeUniversal 吗?
    【解决方案2】:

    鉴于您了解当前的文化,您可以使用这个:

    DateTime.Parse(dateString, new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name, false));
    

    【讨论】:

      【解决方案3】:

      你可以这样试试:

      DateTime d1 = DateTime.ParseExact("2015-08-26 10:34:50,431", "yyyy-MM-dd HH:mm:ss,fff",                                                                                                
                     System.Globalization.CultureInfo.InvariantCulture)
      

      查看DateTime.ParseExact Method了解详情。

      【讨论】:

      • 但我现在不知道我将有什么类型的输入(美国或英国语言环境)
      【解决方案4】:

      您需要使用DateTime.ParseExact。以下版本:

      public static DateTime ParseExact(
          string s,
          string[] formats,
          IFormatProvider provider,
          DateTimeStyles style
      )
      

      哪个

      将日期和时间的指定字符串表示形式转换为其 DateTime 等效使用指定的格式数组, 特定于文化的格式信息和风格。的格式 字符串表示必须至少匹配一种指定格式 准确或抛出异常。

      因此,只要您确切知道日期的可能格式,该用户将输入您就可以使用此方法捕获所有日期。 ' 这个方法更详细的解释请看here

      【讨论】:

        猜你喜欢
        • 2018-10-19
        • 1970-01-01
        • 2012-05-24
        • 2012-12-05
        • 2013-06-19
        • 1970-01-01
        • 2018-08-29
        • 2014-03-30
        相关资源
        最近更新 更多