我应该如何解析这些DateTime字符串?

时间:2018-07-27 09:59:45

标签: c# datetime parsing

我有两种日期格式:11-Apr-201811-04-2018

对于11-04-2018,我将"dd-MM-yyyy"与DateTime.TryParseExact一起使用成功。

对于11-Apr-2018,我使用"dd-MMM-yyyy",但结果是01/01/2018

我应该尝试针对哪种格式解析日期值11-Apr-2018

这是我的代码:

CultureInfo enZA = new CultureInfo("en-ZA");
var formatStrings = new string[] { "yyyy-MM-dd", "dd-MMM-yyyy" };
DateTime formattedDate;
DateTime.TryParseExact(dateToFormat, 
                       formatStrings, 
                       enZA, 
                       DateTimeStyles.None, 
                       out formattedDate);

3 个答案:

答案 0 :(得分:4)

我建议DateTime.ParseExact,您可以在其中指定几种格式

DateTime date = DateTime.ParseExact(
  valueToParse,
  new string[] { 
    "d-MM-yyyy",     // try this first
    "d-MMM-yyyy" },  // on failure try this next
  CultureInfo.GetCultureInfo("en-US"),
  DateTimeStyles.AssumeLocal);

例如

  string[] tests = new string[] {
    "11-04-2018",
    "11-Apr-2018",
  };

  var result = tests
    .Select(test => DateTime
      .ParseExact(test,
                  new string[] { "d-MM-yyyy", "d-MMM-yyyy" },
                  CultureInfo.GetCultureInfo("en-US"),
                  DateTimeStyles.AssumeLocal))
    .Select(date => date.ToString("dd : MM : yyyy"));

 Console.Write(string.Join(Environment.NewLine, result));

结果:

 11 : 04 : 2018
 11 : 04 : 2018

答案 1 :(得分:0)

DateTime myDate = DateTime.ParseExact("11-04-2018", "dd-mmm-yyyy",System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(myDate.ToShortDateString());

答案 2 :(得分:0)

dd-MMM-yyyy应该是正确的

var foo =  DateTime.Now;
foo.ToString("dd-MMM-yyyy");

为我工作,我使用的tostring可能与TryParseExact的行为有所不同?