2013-09-29 5 views
8

カレンダーの間で変換するには?私はhijriDateに対応gregorianDateが必要カレンダーの間で変換する

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

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

:ここでは、私が持っているものです。

+0

これが役に立つかもしれません:http://stackoverflow.com/questions/11893047/converting-calendarsは –

答えて

7

DateTimeに保存された日付は、常に現在のカレンダーに表示されているようです。したがって、現在のカレンダーがグレゴリオ暦の場合は、hijriDateはすでにグレゴリオ暦で表示されています。

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

あなたの現在のカレンダーは、あなたが使用してグレゴリオ暦の日付を抽出することができるはずUmAlQuraCalendarの場合:

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

実は、 'DateTime'は内部で常にグレゴリオ暦であるので、これはありますわずかに冗長です。 –

14

DateTimeは、代替カレンダーとのコンストラクタでの入力を受け付けることができますが、内部では常にですは、グレゴリオ暦相当語を使用して格納されます。あなたはすでにあなたが探しているものを持っています。

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 

他の方向に進むには、カレンダーオブジェクトのメソッドを使用して部品を取得する必要があります。

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
拡張メソッドとして

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

    return new DateTime(umAlQura.GetYear(gregorianDate), umAlQura.GetMonth(gregorianDate), umAlQura.GetDayOfMonth(gregorianDate), umAlQura); 
}