【问题标题】:Convert between calendars in Universal Apps在通用应用程序中的日历之间转换
【发布时间】:2015-11-01 11:23:56
【问题描述】:

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

日期时间构造函数(Int32, Int32, Int32, Calendar)

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

知道既然缺少这个ctor,我该如何在通用应用程序上执行日期转换吗?例如将回历/希伯来日期转换为 Greogiran?

-塔里克

【问题讨论】:

    标签: c# datetime calendar win-universal-app


    【解决方案1】:

    如果您想使用 .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

    回历中的 1437/1/19 是公历中的 2015/11/1

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      相关资源
      最近更新 更多