.NET Comment analyser une chaîne de date Persan / Farsi (calendrier Jalali) dans un objet DateTime?

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

  •  25-10-2019
  •  | 
  •  

Question

J'ai couru à travers plusieurs grandes bibliothèques de code pour convertir une date persane (calendrier Jalali) à une date grégorienne. Cependant, ma source d'origine est une chaîne, pas un objet DateTime. Il ne semble pas être le soutien officiel dans le cadre .NET pour les dates du calendrier en utilisant l'analyse syntaxique Persian (si je me trompe, s'il vous plaît me montrer!).

Mon but:

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

Et bien sûr, certaines dates peuvent utiliser des noms de mots pendant des mois et des jours de la semaine, donc je voudrais être en mesure de soutenir le protocole standard de chaîne de format.

EDIT: Je sais au sujet de la fonctionnalité DateTime.Parse typique. Le calendrier persan ne peut pas être utilisé parce que Microsoft a laissé incomplète et / ou ne sera pas réparer. Si quelqu'un peut me pointer vers un code d'analyse syntaxique date persane, je serais reconnaissant. Sinon, je demande à quelqu'un supprimer la question et il suffit d'écrire moi-même.

Était-ce utile?

La solution 2

Pour l'analyse de la chaîne de date, j'utilise simplement le calendrier par défaut pour obtenir les valeurs de date (année, mois, jour, etc.)

J'utilise ensuite cette bibliothèque pour convertir les valeurs de date perses à la les valeurs de date grégorien.

Mon code ressemble maintenant à ceci:

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);

Bien sûr, je vais devoir prendre soin des composants de date avec des noms (mois, jours de la semaine) moi-même, mais je peux faire face à ce assez facilement.

Autres conseils

Vous pouvez toujours utiliser la classe native System.Globalization.PersianCalendar .NET. mais il est un peu difficile.

Considérez ce code pour la conversion de Jalali Date (ici 18/03/1387) grégorien DateTime:

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

et le code suivant pour convertir un DateTime grégorien (ici 03/08/1983) à chaîne Date persan:

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

juste une note pour le lien fourni par Huissier @ Dan Je dois répéter l'auteur des paroles de l'article:

« Le but principal d'utiliser ce JalaiCalendar à la place du PersianCalendar de .NET Framework doit être la nécessité de la conversation de date pour les événements historiques. Si vous voulez juste afficher la date dans votre site Web, PersianCalendar suffit. »

Dans l'algorithme de fait de .NET Framework est correct pour les années 1178 à 1634 Jalali (1799-2256 grégorien)

Mise à jour:

A partir du .NET cadre 4.6 , la classe PersianCalendar utilise l'algorithme Hijri astronomique solaire plutôt que d'un algorithme d'observation aux dates de calculer. Cela rend la mise en œuvre PersianCalendar compatible avec le calendrier persan utilisé en Iran et en Afghanistan, les deux pays où le calendrier persan est dans la plupart répandu. Donc, si vous utilisez> 4.6 version de .NET Framework vous n'avez pas besoin d'autres bibliothèques pour convertir les dates à / de calendrier persan.

Ou:

using System.Globalization;

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

Il y a plus exemple: http://msdn.microsoft.com/en-us/library/2h3syy57 .aspx # Y418

essayer dans ASP.NET MVC pour valider la date persane

 [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")]

pour plus d'informations sur validate persan Date de visite ce lien

?????????? ????? ???? ?? Expression régulière

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top