2013-09-29 10 views
8

Jak przekonwertować kalendarze? Oto co mam:Konwersja między kalendarzami

UmAlQuraCalendar hijri = new UmAlQuraCalendar(); 
GregorianCalendar cal = new GregorianCalendar(); 

DateTime hijriDate = new DateTime(1434, 11, 23, hijri); 
DateTime gregorianDate = ...; // 

muszę gregorianDate odpowiadający hijriDate.

+0

To może być pomocne: http://stackoverflow.com/questions/11893047/converting-calendars –

Odpowiedz

7

Wygląda na to, że Data zapisana w DateTime jest zawsze w bieżącym kalendarzu. Więc jeśli aktualny kalendarz jest gregoriański hijriDate jest już w gregoriańskim.

var hijriDate = new DateTime(1434, 11, 23, hijri); 
//Console writeline will show 2013-09-29 00:00:00 

Jeśli aktualny kalendarz jest UmAlQuraCalendar powinieneś być w stanie wyodrębnić datę gregoriański używając:

var hijri = new UmAlQuraCalendar(); 
var cal = new GregorianCalendar(); 

var hijriDate = new DateTime(1434, 11, 23, hijri); 
var y = cal.GetYear(hijriDate), 
var m = cal.GetMonth(hijriDate), 
var d = cal.GetDayOfMonth(hijriDate) 
+0

Właściwie 'DateTime' jest zawsze gregoriański wewnętrznie, tak to jest lekko nadmiarowy. –

14

DateTime może zaakceptować wkład w jej konstruktora z alternatywnym kalendarzu, ale wewnętrznie jest zawsze przechowywany przy użyciu odpowiednika gregoriańskiego. Więc już masz to, czego szukasz.

Calendar umAlQura = new UmAlQuraCalendar(); 
DateTime dt = new DateTime(1434, 11, 23, umAlQura); 

// As a string, it will format with whatever the calendar for the culture is. 
Debug.WriteLine(dt.ToString("d", CultureInfo.InvariantCulture)); // 09/29/2013 
Debug.WriteLine(dt.ToString("d", new CultureInfo("ar-SA")));  // 23/11/34 

// But the individual integer properties are always Gregorian 
Debug.WriteLine(dt.Year); // 2013 
Debug.WriteLine(dt.Month); // 9 
Debug.WriteLine(dt.Day); // 29 

Idąc w przeciwnym kierunku, musisz uzyskać części za pomocą metod na obiekcie kalendarza.

DateTime dt = new DateTime(2013, 9, 29); // Gregorian 

Calendar umAlQura = new UmAlQuraCalendar(); 

Debug.WriteLine(umAlQura.GetYear(dt));  // 1434 
Debug.WriteLine(umAlQura.GetMonth(dt));  // 11 
Debug.WriteLine(umAlQura.GetDayOfMonth(dt)); // 23 
0

Jako metodę rozszerzenia

public static DateTime GregorianToUmAlQura(this DateTime gregorianDate) 
{ 
    Calendar umAlQura = new UmAlQuraCalendar(); 

    return new DateTime(umAlQura.GetYear(gregorianDate), umAlQura.GetMonth(gregorianDate), umAlQura.GetDayOfMonth(gregorianDate), umAlQura); 
} 
Powiązane problemy