有没有办法找出一个 DateTime 变量对应的日历?

Is there a way to find out a DateTime variable corresponding calendar?

假设我们有一个给定的 DateTime 变量,例如:

DateTime BirthDate{get;set;}

和不同的 users/clients 根据他们的首选日历设置此变量(在我们的例子中 GeorgianHijriPersian Calendar),我们希望将所有日期保存在Gerogian 演示文稿,以便我们可以将它们保存在 Microsoft SQL 服务器中。 问题是是否有办法找出给定日期的日历,以便我们可以将其从原始日历转换为 Georgian Canlendar ?

不,DateTime 不保留日历信息...它 有效 总是在公历中。如果您使用不同的日历系统构建 DateTime,它会将其转换为公历,您需要使用 Calendar 方法返回到原始值。所以你需要单独存储日历系统,基本上。听上去,这可能是客户端配置的一部分。

例如:

Calendar hebrewCalendar = new HebrewCalendar();
DateTime today = new DateTime(5775, 5, 18, hebrewCalendar);
Console.WriteLine(today.Year); // 2015
Console.WriteLine(hebrewCalendar.GetYear(today)); // 5775

另一方面,如果您要使用我的 Noda Time 项目,则适当的类型 do 会保留日历系统信息 - 并且通常更清楚瞬间、当地时间、当地时间等之间的差异。请注意,显然我有偏见:)

Noda Time 相当于上面的时间(使用 2.0 因为它稍微简单一点!)

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        var hebrewCalendar = CalendarSystem.HebrewCivil;
        var today = new LocalDate(5775, 5, 18, hebrewCalendar);
        Console.WriteLine(today.Year); // 5775
        Console.WriteLine(today.WithCalendar(CalendarSystem.Gregorian).Year); // 2015
    }
}