如何在日历之间进行转换?这就是我所拥有的:
UmAlQuraCalendar hijri = new UmAlQuraCalendar();
GregorianCalendar cal = new GregorianCalendar();
DateTime hijriDate = new DateTime(1434, 11, 23, hijri);
DateTime gregorianDate = ...; //
我需要一个与gregorianDate
对应的hijriDate
。
答案 0 :(得分:17)
DateTime
可以在其构造函数中接受带有替代日历的输入,但在内部使用Gregorian等效项总是存储。所以你已经拥有了你想要的东西。
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
答案 1 :(得分: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)
答案 2 :(得分:1)
作为扩展方法
public static DateTime GregorianToUmAlQura(this DateTime gregorianDate)
{
Calendar umAlQura = new UmAlQuraCalendar();
return new DateTime(umAlQura.GetYear(gregorianDate), umAlQura.GetMonth(gregorianDate), umAlQura.GetDayOfMonth(gregorianDate), umAlQura);
}