C# 在.NET中是否可以将非公历日期表示为DateTime?
我很难用C#表示波斯(太阳Hijri历)日期为C# 在.NET中是否可以将非公历日期表示为DateTime?,c#,.net,datetime,gregorian-calendar,date-conversion,C#,.net,Datetime,Gregorian Calendar,Date Conversion,我很难用C#表示波斯(太阳Hijri历)日期为DateTime,特别是在特定月份的某些日子,例如2004年31月,在公历中这样的日期毫无意义: System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar(); DateTime date = new DateTime(2013,7,22); int year = p.GetYear(date); int month = p.GetMonth(d
DateTime
,特别是在特定月份的某些日子,例如2004年31月,在公历中这样的日期毫无意义:
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime date = new DateTime(2013,7,22);
int year = p.GetYear(date);
int month = p.GetMonth(date);
int day = p.GetDayOfMonth(date);
DateTime d1 = new DateTime(year, month, day);
上述代码将导致一个ArgumentOutOfRangeException
语句:
年、月和日参数描述不可表示的日期时间。
这是意料之中的
如何在.NET中将波斯语日期表示为DateTime
s,并将日期(如02年30月和04年31月)考虑在内
上面的代码将导致ArgumentOutOfRangeException,表示:年、月和日参数描述不可表示的日期时间
是的,因为除非指定日历,DateTime
参数应为公历。您可以通过以下方式指定日历:
DateTime d1 = new DateTime(year, month, day, p);
请注意,如果您现在使用d1.Year
,您将返回2013年,而不是Year
<代码>日期时间基本上总是公历的。但是,如果使用以波斯日历作为默认日历的区域性,则在将DateTime
格式设置为字符串时,将适当地转换值。编辑:不幸的是,根据:
目前,PersianCalendar类不是CultureInfo类支持的任何区域性的可选日历,因此不能作为默认日历
正如一条评论所提到的,我可以指出:它还不支持波斯日历。它支持太阳历,但不支持太阳历:(我可以考虑在未来的版本中加入它…From
每个DateTime成员隐式使用公历执行
它的操作,除了指定
日历,以及具有从IFormatProvider派生的参数的方法,
例如System.Globalization.DateTimeFormatInfo,隐式地
指定日历
也来自
目前,PersianCalendar类不是
CultureInfo类支持的任何区域性,因此无法
是默认日历
你想要什么对我来说似乎是不可能的。我在这里只是猜测,但显然这些日期仍然与公历中的日期相对应。你可能需要在公历中用DateTime表示它们,并在任何地方进行转换。我不知道Noda Time是否支持这一点,但你检查过了吗它?你的意思是我必须接受将所有日期表示为公历日期,然后编写一些扩展方法将它们转换为字符串(这就是我现在正在做的事情)?什么是野田时间?@MohammadSepahvand:这正是我所说的:这就是如何从不同日历中的年/月/日值创建
DateTime
值,但是DateTime
本身基本上是格里高利的。所以基本上,这是不可能的?不可能将DateTime设置为格里高利,但你可以得到帮助从框架中进行转换。谢谢,是的,如果未来的版本包括太阳日历,那就太好了。@MohammadSepahvand:我会研究它-部分取决于它的可预测性。如果它是基于观察的日历,这会使它变得更难。不过我们会看到:)(我自己也没有日历方面的经验,所以很难考好。)