C# - Convert.ToDateTime() 日期中未指定年份
C# - Convert.ToDateTime() where Year is not specified in the Date
我想转换如下所示的日期列表:
- 6 月 6 日
- 9 月 18 日
- 11 月 2 日
- 2 月 29 日
日期本身 没有指定年份 所以当我尝试使用 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);
我想转换如下所示的日期列表:
- 6 月 6 日
- 9 月 18 日
- 11 月 2 日
- 2 月 29 日
日期本身 没有指定年份 所以当我尝试使用 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);