首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET如何将波斯语/波斯语日期字符串(贾拉利历法)解析为DateTime对象?

.NET如何将波斯语/波斯语日期字符串(贾拉利历法)解析为DateTime对象?
EN

Stack Overflow用户
提问于 2011-04-28 06:03:35
回答 4查看 9.9K关注 0票数 13

我遇到了几个很棒的代码库,用于将波斯语(农历)日期转换为公历日期。但是,我的原始源是一个字符串,而不是DateTime对象。在.NET框架中似乎没有官方支持使用波斯历解析日期(如果我错了,请告诉我!)

我的目标是:

代码语言:javascript
复制
string persianDateString="1390/02/07";
DateTime persianDateTime = MyPersianParser.Parse(persianDateString, "yyyy/mm/dd");

当然,有些日期可能使用单词名称表示月份和星期,因此我希望能够支持标准格式字符串协议。

编辑:我知道典型的DateTime.Parse功能。无法使用波斯历,因为Microsoft将其保留为不完整和/或不会修复它。如果有人能告诉我一些波斯日期解析代码,我将不胜感激。如果没有,我会要求别人删除这个问题,然后自己写出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-29 03:12:20

为了解析日期字符串,我简单地使用默认日历来获取日期值(年、月、日等)。

然后使用this library here将波斯日期值转换为公历日期值。

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

代码语言:javascript
复制
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);

当然,我必须自己处理带有名称(月份、星期几)的日期组件,但我可以很容易地处理它。

票数 4
EN

Stack Overflow用户

发布于 2011-07-27 23:23:41

您可以始终使用本机System.Globalization.PersianCalendar .NET类。但这有点棘手。

考虑以下代码,将Jalali Date (此处为1387/03/18)转换为公历DateTime:

代码语言:javascript
复制
System.Globalization.PersianCalendar persianCal = new System.Globalization.PersianCalendar();
    DateTime GregorianDate = persianCal.ToDateTime(1387, 3, 18, 12, 0, 0, 0);

下面的代码将格里高利DateTime (这里是1983/08/03)转换为波斯日期字符串:

代码语言:javascript
复制
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年的贾拉利(1799到2256公历)是正确的。

更新:

Starting with the .NET Framework 4.6,PersianCalendar类使用Hijri 太阳天文算法而不是观测性算法来计算日期。这使得PersianCalendar实现与伊朗和阿富汗使用的波斯历保持一致,这两个国家的波斯历使用最广泛。因此,如果您使用的是高于4.6版本的.NET框架,则不需要任何其他库来将日期与波斯历进行相互转换。

票数 14
EN

Stack Overflow用户

发布于 2011-04-28 06:12:13

或者:

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5811170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档