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

时间:2015-02-07 10:34:18

标签: c# datetime calendar

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

DateTime BirthDate{get;set;}

并且不同的用户/客户根据他们的首选日历设置此变量(在我们的案例中为GeorgianHijriPersian Calendar),我们希望将所有日期保存在{{1}演示文稿,以便我们可以将它们保存在Microsoft SQL Server中。 问题是,是否有办法找出给定日期的日历,以便我们可以将其从原始日历转换为Gerogian

1 个答案:

答案 0 :(得分:2)

不,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项目,那么适当的类型会保留日历系统信息 - 并且通常会更清楚地了解时刻之间的差异,当地日期,当地时间等。显然我有偏见,请注意:)

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
    }
}