我有一个int表示来自Year Zero的一些格里高利日(感谢,Erlang)。如何将其转换为DateTime对象?我无法创建DateTime(0,0,0),并且Convert.DateTime(int)会抛出无效的强制转换。
答案 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。如果它能帮助您解决问题,请不要忘记标记我的答案!感谢。