为什么Datetime.DayOfWeek是错误的?

Reg*_*lez 4 .net c# datetime

考虑一下这段简单的代码

var date = new DateTime(1307, 10, 13);
Console.WriteLine(date.DayOfWeek);
Run Code Online (Sandbox Code Playgroud)

它输出:

星期四

但,

维基百科(法语版本)说,这个日期是星期五:

旺德雷迪历史博物馆1307年10月13

谁是对的?

我的猜测是.Net没有考虑到日历/公历更改。

Jon*_*eet 17

我的猜测是.Net没有考虑到儒略历/公历更改

实际上,正如所记录的(强调我的):

DateTime值类型表示日期和时间,其值从公历 9999年12月31日(公元)0001 Anno Domini(公共时代)00:00:00(午夜)到公元9999年12月31日晚上11:59:59。日历

请注意,如果没有更多信息,就无法考虑朱利安(Julian)/格里高利安(Gregorian)过渡,因为这发生在不同地方的不同日期。

如果您知道要在儒略历中表示日期,建议您使用JulianCalendar该类。

using System;
using System.Globalization;
using static System.FormattableString;

public class Program
{
    public static void Main()
    {
        var julianCalendar = new JulianCalendar();
        var date = new DateTime(1307, 10, 13, julianCalendar);

        Console.WriteLine(Invariant($"Gregorian: {date:yyyy-MM-dd}"));
        Console.WriteLine(date.DayOfWeek);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Gregorian: 1307-10-21
Friday
Run Code Online (Sandbox Code Playgroud)