在 Universal Apps 中的日历之间转换
Convert between calendars in Universal Apps
通用 Windows 平台 (UWP) DateTime 似乎不支持 DateTime 的这个构造函数 (link)。
DateTime Constructor (Int32, Int32, Int32, Calendar)
我正在编写的应用程序的一个核心功能是在不同的日历格式(例如公历、回历、希伯来语)之间转换 DateTimes,之前我依靠该构造函数来执行转换。
既然缺少此 ctor,知道如何在通用应用程序上执行日期转换吗?例如将 Hijri/Hebrew 日期转换为 Greogiran?
-塔里克
如果您想使用 .NET classes,这些是 ToDateTime method in Calendar class 将日历中的日期转换为日期时间(公历):
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 in persian is 2015/11/1 in gregorian
还有GetYear、GetMonth等类似的方法可以转换回来
但是如果你想使用 Windows Runtime 类(推荐),Calendar class is available with a 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 in Persian is 1437/1/19 in Hijri
1437/1/19 in Hijri is 2015/11/1 in Gregorian
通用 Windows 平台 (UWP) DateTime 似乎不支持 DateTime 的这个构造函数 (link)。
DateTime Constructor (Int32, Int32, Int32, Calendar)
我正在编写的应用程序的一个核心功能是在不同的日历格式(例如公历、回历、希伯来语)之间转换 DateTimes,之前我依靠该构造函数来执行转换。
既然缺少此 ctor,知道如何在通用应用程序上执行日期转换吗?例如将 Hijri/Hebrew 日期转换为 Greogiran?
-塔里克
如果您想使用 .NET classes,这些是 ToDateTime method in Calendar class 将日历中的日期转换为日期时间(公历):
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 in persian is 2015/11/1 in gregorian
还有GetYear、GetMonth等类似的方法可以转换回来
但是如果你想使用 Windows Runtime 类(推荐),Calendar class is available with a 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 in Persian is 1437/1/19 in Hijri
1437/1/19 in Hijri is 2015/11/1 in Gregorian