如何将“MM/dd/yy”字符串转换为最近一年的日期?

msm*_*cic 1 c# datetimeoffset .net-5

我将日期作为字符串输入,格式为MM/dd/yy.

我正在尝试将其转换为DateTimeOffset以下方式:

string dateString = "02/11/48";

DateTimeOffset.TryParseExact(
    dateString,
    "MM/dd/yy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out DateTimeOffset date);
Run Code Online (Sandbox Code Playgroud)

然而,当这个字符串被转换为 时DateTimeOffset,年份被设置为 1948。由于业务逻辑,我知道那里的日期总是有最近的未来年份,所以年份应该是 2048。

有没有办法将字符串转换为DateTimeOffset这种方式,或者在解析后我是否必须在其上添加额外的逻辑?

Pou*_*Bak 5

您可以使用这种更简单的方法:

string dateString = "02/11/48";

DateTimeOffset.TryParseExact(
    dateString,
    "MM/dd/yy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out DateTimeOffset date);

if (date < DateTimeOffset.UtcNow)
{
    date = date.AddYears(100);
}
Run Code Online (Sandbox Code Playgroud)

如果解析的值在现在之前,它只会增加 100 年。

  • 2 月 29 日只有一个小问题。在 99.5% 的情况下,一个世纪相隔的两年要么都是闰年,要么都不是。但例如 2000 年是闰年,而 2100 年则不是。 (4认同)