Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中是否可以将非公历日期表示为DateTime?_C#_.net_Datetime_Gregorian Calendar_Date Conversion - Fatal编程技术网

C# 在.NET中是否可以将非公历日期表示为DateTime?

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

我很难用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(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:我会研究它-部分取决于它的可预测性。如果它是基于观察的日历,这会使它变得更难。不过我们会看到:)(我自己也没有日历方面的经验,所以很难考好。)