2030年转换为1930年的日期

时间:2020-06-14 08:08:49

标签: c# date

我有一些旧代码,我们看到了一些问题。例如,如果有,

var dt2030 = new DateTime(2030, 01, 01);
var dt1 = Convert.ToDateTime(dt2030.ToString("dd/MM/yy"));

此处的dt1表示1930。yy是否有固定格式?我的意思是,如果它与当前时间相差10年,那么要花更多的时间才能获得新的一年?

enter image description here

2 个答案:

答案 0 :(得分:2)

您的代码中的问题是yy。您必须使用yyyy。您应使用正确的格式yyyy

var dt2030 = new DateTime(2030, 01, 01);
var dt1 = Convert.ToDateTime(dt2030.ToString("dd/MM/yyyy"));
Console.WriteLine(dt1);

答案 1 :(得分:1)

默认日历从1930年到2029年,因此,如果您要求它解析年份30,默认情况下,日期不能为1930

一种可能的解决方案是使用CultureInfo并扩大范围,然后在解析日期时还将CultureInfo作为参数传递给以下位置:

    CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.LCID);
    ci.Calendar.TwoDigitYearMax = 2099;

    var dt2030 = new DateTime(2030, 01, 01);
    var dt1 = Convert.ToDateTime(dt2030.ToString("dd/MM/yy"), ci);

    Console.WriteLine(dt1);