转换自定义格式的日期

Converting custom formatted dates

我想知道是否可以将自定义格式的日期时间转换为更标准化的格式。

我在字符串中有两种类型的日期格式。

string Date1 = @"06.12.2015 18.00";
string Date2 = @"1944-09-29";

并且我想将两者都转换为这些格式:

yyyy-MM-ddThh:mm:ssZ

我该怎么做?

我试过了

DateTime testdate = DateTime.ParseExact(Date1, 
                                       "yyyy-MM-ddThh:mm:ssZ", 
                                        CultureInfo.InvariantCulture);

但运气不好。

编辑:这个问题被标记为可能与 Whosebug 中的另一个条目重复。这里的区别是,正如 Vadim Yarovikov 在下面的评论中所说的那样,这是一个由两部分组成的问题。 “1) 将值解析为日期和 2) 将日期转换为所需格式。”

您可以在一次 DateTime.ParseExact 调用中提供 两种 格式:

string[] tests = new string[] {
  @"06.12.2015 18.00", 
  @"1944-09-29" 
};

var result = tests
  .Select(item => DateTime.ParseExact(
     item,
     new string[] { "d.M.yyyy H.m", "yyyy-M-d" },
     CultureInfo.InvariantCulture, 
     DateTimeStyles.AssumeLocal))
  .Select(date => date.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture));

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

结果:

2015-12-06T18:00:00Z
1944-09-29T12:00:00Z

旁注:我认为实际的目标格式应该是"yyyy-MM-ddTHH:mm:ssZ"(请注意HH而不是hh)否则无法区分6:00AM6:00PM (18:00)