.NET如何将波斯语 / Farsi Date String(Jalali Calendar)解析到DateTime对象中?

StackOverflow https://stackoverflow.com/questions/5811170

  •  25-10-2019
  •  | 
  •  

我已经跨过几个出色的代码库,用于将波斯语(Jalali日历)日期转换为Gregorian日期。但是,我的原始来源是字符串,而不是DateTime对象。 .NET框架中似乎没有官方支持使用波斯日历来解析日期(如果我错了,请告诉我!)。

我的目标:

string persianDateString="1390/02/07";
DateTime persianDateTime = MyPersianParser.Parse(persianDateString, "yyyy/mm/dd");

当然,某些日期可能会在一周的几个月和几天内使用单词名称,因此我希望能够支持标准格式字符串协议。

编辑:我知道典型的datetime.parse功能。波斯日历不能使用,因为微软使其不完整和/或不会修复它。如果有人可以指出一些波斯日期解析代码,我将不胜感激。如果没有,我会要求某人删除问题,然后自己写。

有帮助吗?

解决方案 2

对于解析日期字符串,我只使用默认日历来获取日期值(年,月,日等)

然后我使用 这个库在这里 将波斯日期值转换为Gregorian日期值。

我的代码现在看起来像这样:

string persianDate = "1390/02/07";
CultureInfo persianCulture = new CultureInfo("fa-IR");
DateTime persianDateTime = DateTime.ParseExact(persianDate, "yyyy/MM/dd", persianCulture);    // this parses the date as if it were Gregorian

JalaliCalendar jc = new JalaliCalendar();
// convert the Persian calendar date to Gregorian
DateTime gregorianDateTime = jc.ToDateTime(persianDateTime.Year, persianDateTime.Month, persianDateTime.Day, persianDateTime.Hour, persianDateTime.Minute, persianDateTime.Second, persianDateTime.Millisecond);

当然,我必须自己照顾带有名称(几个月,一周中的几个月)的约会组件,但我可以很容易地处理。

其他提示

您始终可以使用本机system.globalization.persiancalendar .NET类。但这有点棘手。

考虑此代码从Jalali日期(此处1387/03/18)转换为Gregorian DateTime:

System.Globalization.PersianCalendar persianCal = new System.Globalization.PersianCalendar();
    DateTime GregorianDate = persianCal.ToDateTime(1387, 3, 18, 12, 0, 0, 0);

以及以下代码将Gregorian DateTime(此处1983/08/03)转换为波斯日期字符串:

DateTime GregorianDate = DateTime.Parse("1983/08/03");
string FarsiDateConverted = persianCal.GetYear(GregorianDate).ToString("0000") + "/" +
             persianCal.GetMonth(GregorianDate).ToString("00") + "/" +
             persianCal.GetDayOfMonth(GregorianDate).ToString("00");

只是@Dan Bailiff提供的链接的注释,我应该重复文章的作者:

“使用此jalaicalendar代替.NET框架的Persiancalendar的主要目的必须是历史事件的日期对话。如果您只想在网站上显示当前日期,Persiancalendar就足够了。”

实际上,.NET框架的算法是正确的1178年至1634年的Jalali(1799年至2256年Gregorian)

更新:

从.NET框架4.6开始, ,Persiancalendar类使用Hijri 太阳天文算法 而不是计算日期的观察算法。这使得波斯卡伦达的实施与伊朗和阿富汗使用的波斯日历一致,这是波斯日历在大多数广泛使用中的两个国家。因此,如果您使用> 4.6版本的.NET框架,则不需要任何其他库来转换到波斯日历的日期。

或者:

using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("fa-IR");
      string MyString = "1390/02/07";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);

还有更多示例:http://msdn.microsoft.com/en-us/library/2h3syy57.aspx#y418

在ASP.NET MVC中尝试以验证波斯日期

 [RegularExpression(@"^$|^([1۱][۰-۹ 0-9]{3}[/\/]([0 ۰][۱-۶ 1-6])[/\/]([0 ۰][۱-۹ 1-9]|[۱۲12][۰-۹ 0-9]|[3۳][01۰۱])|[1۱][۰-۹ 0-9]{3}[/\/]([۰0][۷-۹ 7-9]|[1۱][۰۱۲012])[/\/]([۰0][1-9 ۱-۹]|[12۱۲][0-9 ۰-۹]|(30|۳۰)))$", ErrorMessage = "Not Validate")]

有关验证波斯日期的更多信息,请访问此链接

اابارس后^یخشش假极

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top