如何转换表示从零到DateTime的天数?

时间:2011-02-01 23:03:42

标签: c# datetime

我有一个int表示来自Year Zero的一些格里高利日(感谢,Erlang)。如何将其转换为DateTime对象?我无法创建DateTime(0,0,0),并且Convert.DateTime(int)会抛出无效的强制转换。

5 个答案:

答案 0 :(得分:2)

如果您有一个号码,并且您知道它所代表的日期(来自Erlang),您可以从您选择的任何日期计算偏移量。首选是结果所在区域中的基准日期,这将最小化日历转换效果。 (格里高利历从大约1600年开始有效)。

如果您知道该偏移量,则可以使用选择日期作为将来计算的基础。

示例:

我希望我的偏移日期为:1/1/2000。这将是我从中计算出来的日期。

我知道erlang的第37892号实际上是1970年1月1日(这是一个例子)。

然后我可以计算出偏移量:

var myBaseDate = new DateTime(2000,1,1);

var exampleNrOfDays = 37892;
var exampleDate = new DateTime(1970,1,1);
var offset = exampleDate - myBaseDate;
var offsetInDays = exampleNrOfDays - (int)offset.TotalDays;

// Now I can calculate

var daysFromErlang = 30000; // <= example
var theDate = myBaseDate.AddDays(daysFromErlang - offsetInDays);

答案 1 :(得分:0)

显示如何计算给定日期的天数。 http://dotnetperls.com/datetime-elapsed

答案 2 :(得分:0)

如果第0天为0/0/0,那么365+30+1之前的DateTime.Min是1/1/1。因此,您可以按365+30+1减去零年的天数,然后添加到DateTime.Min

现在第1个月是1月31天,但是第0个月是什么?我以为是30天。

答案 3 :(得分:0)

有0,你可能意味着1月1日0点0点。据我所知,格里高利历中没有0年。

如果以上是正确的,你可以做到

DateTime date = new DateTime();
date.AddDays(numberOfDays);

因为默认构造函数'DateTime()'返回“零”DateTime对象。

有关更多信息,请参阅DateTime reference

答案 4 :(得分:0)

我不确定您是否知道这一点,但System.Globalization中有一个Calendar对象。不仅如此,还有一个GregorianCalendar对象。

所以试试这个:

GregorianCalendar calendar = new GregorianCalendar();
DateTime minSupportedDateTime = calendar.MinSupportedDateTime; 

//which is the first moment of January 1, 0001 C.E.

DateTime myDate = minSupportedDateTime.AddDays(55000);
//this is when you add the number of days you have.

谢谢,

Bleepzter

PS。如果它能帮助您解决问题,请不要忘记标记我的答案!感谢。