5

我无法像在 C# 中那样表示波斯(太阳回历)日期DateTime,特别是在特定月份的某些日子,例如 31/04,在公历中这样的日期是没有意义的:

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说法: Year, Month, and Day parameters describe an un-representable DateTime.

这是预期的。

DateTime考虑到诸如 30/02 和 31/04 之类的日期,如何在 .NET 中将波斯日期表示为s?

4

2 回答 2

3

上面的代码将导致 ArgumentOutOfRangeException 说:Year、Month 和 Day 参数描述了一个不可表示的 DateTime。

是的,因为除非您指定日历,否则DateTime参数应为公历。您可以指定日历:

DateTime d1 = new DateTime(year, month, day, p);

请注意,如果您现在服用d1.Year,您将返回 2013 年,而不是year...始终DateTime是公历,基本上。但是,如果您使用将波斯日历作为默认日历的文化,那么当您将 a 格式化为字符串时,这将适当地转换值。编辑:不幸的是,根据文档DateTime

目前,PersianCalendar 类不是 CultureInfo 类支持的任何文化的可选日历,因此不能是默认日历。

正如评论提到的Noda Time,我可以解决这个问题:它还不支持波斯历。它支持农历回历,但不支持太阳历:(我可以考虑将其添加到未来的版本中......

于 2013-07-31T07:04:23.140 回答
1

来自MSDN

每个 DateTime 成员都隐式使用公历来执行其操作,但指定日历的构造函数和具有从 IFormatProvider 派生的参数的方法(例如 System.Globalization.DateTimeFormatInfo 隐式指定日历)除外。

也来自PersianCalendar 类

目前,PersianCalendar 类不是 CultureInfo 类支持的任何文化的可选日历,因此不能是默认日历。

你想要的对我来说似乎是不可能的。

于 2013-07-31T07:10:42.307 回答