.net有BigDateTime类型吗?

时间:2009-08-09 15:28:56

标签: .net datetime

我需要代表1月1日1日之前的日期。你知道包含这种类型的图书馆吗?

它应该提供以下功能:

  • 加/减
  • BigTimeSpan
  • 大于/小于比较

如果日期越长,价值就不那么准确就行了。

4 个答案:

答案 0 :(得分:4)

公元前45年有445天,所以你需要添加它,并从Julian(45bc)切换到上一个罗马日历。格里高利历的变化发生的时间比你需要的要多很多(16世纪),所以你不必担心。

使用DateTime的两个主要问题是最小和最大常量。显然,作为一个结构,你也不能将它子类化。

我的第一个选择是编写我的BigDateTime或BCDateTime结构,并在组合中使用DateTime。然后,您可以设置当前日历:

CultureInfo.CurrentCulture.DateTimeFormat.Calendar = new JulianCalendar();

对于Julian一个,但正如我所提到的,只能让你到公元前45年

如果年份低于45,您可以再次将日历切换到您自己的子类Calendar对象。如果年份是45岁,您将需要另一个日历,其中包含当年的445天(他们这样做是为了在旧日历之间进行调整)。

这个物体的最小和最大常数是多少?文明本身的曙光?!

你需要选择那些,并且还要记住朱利安历法以及之前的非改革版本是针对罗马帝国的国家。作为一名西方人,我不知道其他日历存在,您可以从the wikipedia articles though获得更多信息。

如果你选择做所有的文化,那么你手上有一个巨大的任务(正如原来的.NET团队所做的那样)来实现已经存在的日历。不同的日历相对于BC有不同的起始时期,例如伊斯兰,中国和印度教的日历。有关这方面的更多信息是here。因此,如果你想要每一种文化,而不仅仅是罗马帝国,你需要制作自己的以下版本,或至少其中一些:

System.Globalization.Calendar
    System.Globalization.EastAsianLunisolarCalendar 
    System.Globalization.GregorianCalendar 
    System.Globalization.HebrewCalendar 
    System.Globalization.HijriCalendar 
    System.Globalization.JapaneseCalendar 
    System.Globalization.JulianCalendar 
    System.Globalization.KoreanCalendar 
    System.Globalization.PersianCalendar 
    System.Globalization.TaiwanCalendar 
    System.Globalization.ThaiBuddhistCalendar 
    System.Globalization.UmAlQuraCalendar
祝你好运!看看你是如何上场的,这很有意思。

答案 1 :(得分:2)

使用完全相同的问题查看this thread on SO。基本上,没有内置支持,因此您需要找到第三方实现或自己构建。

答案 2 :(得分:2)

答案 3 :(得分:1)

如果你真的只需要这三个操作(意味着没有星期几,日期,时区等):只需使用long作为数据透视日期的秒数(或毫秒)。 2 ^ 64秒给你五万亿年。