C# - Convert.ToDateTime() 日期中未指定年份

C# - Convert.ToDateTime() where Year is not specified in the Date

我想转换如下所示的日期列表:

日期本身 没有指定年份 所以当我尝试使用 Convert.ToDateTime() 解析它们时假定当前年份 (2021)。如何将这些日期指定为不同的年份?假设我想指定这些日期中的每一个都来自 2020 年。我如何在转换中指定它?这是我要使用 CultureInfo 的地方吗?

您可以解析 (ParseExact)提供的text;唯一可能的问题是 闰年 February 29:

private static DateTime MyConvert(string text, int year = 0) {
  return DateTime.ParseExact(
    $"{(year <= 0 ? DateTime.Today.Year : year)} {text}", 
    "yyyy MMMM d", 
    CultureInfo.InvariantCulture);
}

演示:

  string[] tests = new string[] {
    "June 6",
    "September 18",
    "November 2",
    "February 29"
  };

  string report = string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-15} => {MyConvert(test, 2000):dd.MM.yyyy}"));

  Console.Write(report);

结果:

June 6          => 06.06.2000
September 18    => 18.09.2000
November 2      => 02.11.2000
February 29     => 29.02.2000

一行就可以搞定:

string textDate = "September 18";
int desiredYear = 2008;

DateTime date = Convert.ToDateTime(desiredYear.ToString() + textDate);

只需更改年份 post hoc.

var input = "June 6";
var converted = DateTime.ParseExact("mmmm d");
var date = new DateTime(DateTime.Today.Year, converted.Month, converted.Day);