有没有办法找出一个 DateTime 变量对应的日历?
Is there a way to find out a DateTime variable corresponding calendar?
假设我们有一个给定的 DateTime 变量,例如:
DateTime BirthDate{get;set;}
和不同的 users/clients 根据他们的首选日历设置此变量(在我们的例子中 Georgian
, Hijri
和 Persian 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
}
}
假设我们有一个给定的 DateTime 变量,例如:
DateTime BirthDate{get;set;}
和不同的 users/clients 根据他们的首选日历设置此变量(在我们的例子中 Georgian
, Hijri
和 Persian 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
}
}