在通用应用程序中的日历之间转换

本文关键字:日历 之间 转换 应用程序 | 更新日期: 2023-09-27 18:20:07

通用Windows平台(UWP)DateTime似乎不支持DateTime的此构造函数(链接)。

DateTime构造函数(Int32,Int32,Int32,日历)

我正在编写的应用程序的一个核心功能是在不同的日历格式(例如gregorian、hijri、hebrew)之间转换DateTimes,以前我依靠该构造函数来执行转换。

既然这个ctor不见了,你知道我该如何在通用应用程序上进行日期转换吗?例如,将Hijri/Hebrew日期转换为Greogiran?

-塔里克

在通用应用程序中的日历之间转换

如果您想使用.NET类,这是Calendar类中的ToDateTime方法,用于将该日历中的日期转换为DateTime(格里高利):

int persianYear = 1394;
int persianMonth = 8;
int persianDay = 10;
var persianCalendar = new System.Globalization.PersianCalendar();
DateTime gregDateTime = persianCalendar.ToDateTime(persianYear, persianMonth, persianDay, 0, 0, 0, 0);
Debug.WriteLine(
   string.Format(
      "{0}/{1}/{2} in persian is {3}/{4}/{5} in gregorian",
      persianYear,
      persianMonth,
      persianDay,
      gregDateTime.Year,
      gregDateTime.Month,
      gregDateTime.Day
   ));

输出:

1394/8/10在波斯是2015/11/1在格雷戈里

还有GetYear、GetMonth和类似的方法可以转换回来。

但是,如果你想使用Windows运行时类(推荐),Calendar类可以通过ChangeCalendarSystem方法进行转换。您可以使用年、月和日属性来获取和设置日期组件。

以下是一个示例转换方法,用于将日历系统中的日期组件转换为另一个:

private void ConvertDate(
   string from,
   int year,
   int month,
   int day, 
   string to,
   out int convertedYear,
   out int convertedMonth,
   out int convertedDay) {
   Calendar calendar = new Calendar();
   calendar.ChangeCalendarSystem(from);
   calendar.Year = year;
   calendar.Month = month;
   calendar.Day = day;
   calendar.ChangeCalendarSystem(to);
   convertedYear = calendar.Year;
   convertedMonth = calendar.Month;
   convertedDay = calendar.Day;
}

使用将波斯语转换为回历和将回历转换为格里高利的方法的示例:

int persianYear = 1394;
int persianMonth = 8;
int persianDay = 10;
int hijriYear;
int hijriMonth;
int hijriDay;
ConvertDate(
   CalendarIdentifiers.Persian,
   persianYear,
   persianMonth,
   persianDay,
   CalendarIdentifiers.Hijri,
   out hijriYear,
   out hijriMonth,
   out hijriDay);
Debug.WriteLine(
   string.Format(
      "{0}/{1}/{2} in Persian is {3}/{4}/{5} in Hijri",
      persianYear,
      persianMonth,
      persianDay,
      hijriYear,
      hijriMonth,
      hijriDay
   ));
int gregYear;
int gregMonth;
int gregDay;
ConvertDate(
   CalendarIdentifiers.Hijri,
   hijriYear,
   hijriMonth,
   hijriDay,
   CalendarIdentifiers.Gregorian,
   out gregYear,
   out gregMonth,
   out gregDay);
Debug.WriteLine(
   string.Format(
      "{0}/{1}/{2} in Hijri is {3}-{4}-{5} in Gregorian",
      hijriYear,
      hijriMonth,
      hijriDay,
      gregYear,
      gregMonth,
      gregDay
   ));

输出:

1394/8/10在波斯语中是1437/1/19在Hijri 中

1437/1/19在Hijri是2015/11/1在格里高利