【问题标题】:C# DateTime parse short string ("MMMyy")C# DateTime 解析短字符串(“MMMyy”)
【发布时间】:2012-07-26 06:38:08
【问题描述】:

我有一个包含日期且格式为“MMMyy”的字符串。怎么可能做到这一点?
示例:

string date = "MAY09";
DateTime a = DateTime.Parse("MAY09"); //Gives "2012.05.09 00:00:00"
DateTime b = DateTime.ParseExact("MAY09", "MMMyy", null); //Gives error
DateTime c = Convert.ToDateTime("MAY09"); //Gives "2012.05.09 00:00:00"

I need "2009-05-01"

【问题讨论】:

  • null 表示您当前的文化您尝试过 InvariantCulture 吗?
  • 是的!谢谢。 InvariantCulture 成功了。

标签: c# .net parsing c#-4.0 datetime


【解决方案1】:

在第三个参数之前指定不变的文化而不是null

DateTime b = DateTime.ParseExact("MAY09", "MMMyy", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    第二个是你想要的——除了使用正确的文化。 null 说使用当前文化中的日期/时间格式信息 - 如果不是英语文化,这将失败。 (从你的用户资料中不清楚你在哪里,但大概不是英国文化?)

    指定不变的文化是获取英文月/日名称的一种简单方法:

    using System;
    using System.Globalization;
    
    class Test
    {
        static void Main()
        {
            string text = "MAY09";
            string pattern = "MMMyy";
            var culture = CultureInfo.InvariantCulture;
            DateTime value = DateTime.ParseExact(text, pattern, culture);
            Console.WriteLine(value.ToString("yyyy-MM-dd", culture));
        }
    }
    

    【讨论】:

      【解决方案3】:

      可以直接指定日期/时间格式作为ToString方法的参数

      string dateTime = DateTime.Now.ToString("MMMyy");
      

      【讨论】:

        【解决方案4】:

        这应该会有所帮助:

        string date = "MAY09";
        CultureInfo s = new CultureInfo("en-US");
        DateTime b = DateTime.ParseExact(date, "MMMyy", s);
        

        【讨论】:

          【解决方案5】:

          请尝试以下代码:

          string date = "MAY09";
          CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
          DateTime dateTime = DateTime.ParseExact(date,"MMMyy",culture);
          

          【讨论】:

            猜你喜欢
            • 2011-11-26
            • 1970-01-01
            • 1970-01-01
            • 2011-07-18
            • 2013-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多