.NET Come analizzare una data stringa di Persiano / Farsi (calendario Jalali) in un oggetto DateTime?

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

  •  25-10-2019
  •  | 
  •  

Domanda

Ho eseguito tra diverse librerie di grande codice per la conversione di una data persiano (calendario Jalali) per una data gregoriana. Tuttavia, la mia fonte originale è una stringa, non un oggetto DateTime. Non sembra essere il supporto ufficiale nel .NET framework per l'analisi date utilizzando il calendario persiano (se mi sbaglio, si prega di mostrare me!).

Il mio obiettivo:

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

E, naturalmente, alcune date può utilizzare nomi di parola per mesi e giorni della settimana, quindi mi piacerebbe essere in grado di supportare il protocollo stringa di formato standard.

EDIT: So circa la funzionalità tipica DateTime.Parse. Il calendario persiano non può essere utilizzato perché Microsoft ha lasciato incompleta e / o non lo risolverà. Se qualcuno mi può puntare a qualche codice della data di analisi Persico sarei grato. In caso contrario, mi chiedo che qualcuno togliere la domanda e basta scrivere io stesso.

È stato utile?

Soluzione 2

Per parsing della stringa data, ho semplicemente uso il calendario predefinito per ottenere i valori di data (anno, mese, giorno, ecc.)

Ho quindi utilizzare questa libreria qui per convertire i valori di data persiani al valori di data gregoriano.

Il mio codice ora assomiglia a questo:

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

Naturalmente, dovrò prendere cura di componenti della data con i nomi (mesi, giorni della settimana) me stesso, ma posso affrontare che abbastanza facilmente.

Altri suggerimenti

È sempre possibile utilizzare la classe nativa System.Globalization.PersianCalendar .NET. ma è un po 'complicato.

Si consideri questo codice per la conversione da Jalali Data (qui 1387/03/18) per Gregorian DateTime:

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

e il seguente codice per convertire un DateTime Gregoriano (qui 1983/08/03) per persiana stringa Data:

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

solo una nota per il link fornito da @ Dan Balì dovrei ripetere l'autore delle parole del articolo:

"Lo scopo principale per l'utilizzo di questo JalaiCalendar al posto del PersianCalendar di .NET Framework deve essere la necessità della conversazione data per gli eventi storici. Se si desidera solo per visualizzare la data corrente nel tuo sito web, PersianCalendar è sufficiente."

In algoritmo fatto di .NET Framework è corretto per gli anni 1178 al 1634 Jalali (1799-2256 gregoriano)

Aggiornamento:

A partire con il .NET Framework 4.6 , la classe PersianCalendar utilizza il Hijri solare algoritmo astronomico , piuttosto che un algoritmo di osservazione alle date calcolare. Questo rende l'implementazione PersianCalendar coerente con il calendario persiano in uso in Iran e in Afghanistan, i due paesi in cui il calendario persiano è nella maggior uso diffuso. Quindi, se si utilizza> 4.6 versione di .NET Framework non è necessario altre librerie per la conversione di date per / dal persiano calendario.

o

using System.Globalization;

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

Non c'è altro esempio: http://msdn.microsoft.com/en-us/library/2h3syy57 aspx # Y418

provare in ASP.NET MVC per convalidare Persian data

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

Per ulteriori informazioni sulla convalida persiano Data visita questo link

?????????? ????? ???? ?? Regular Expression

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top