3

我正在尝试将特定的波斯日期转换为公历但没有成功。我试过下面的代码,但我得到编译器错误说:

DateTime 不包含采用 4 个参数的构造函数。

using System.Globalization;

DateTime dt = new DateTime(year, month, day, new PersianCalendar());

我也尝试过以下方式,但我得到了相同的波斯日期(下面代码中的 obj),我传递给ConvertToGregorian函数而不是公历日期:

public static DateTime ConvertToGregorian(this DateTime obj)
    {
        GregorianCalendar gregorian = new GregorianCalendar();
        int y = gregorian.GetYear(obj);
        int m = gregorian.GetMonth(obj);
        int d = gregorian.GetDayOfMonth(obj);
        DateTime gregorianDate = new DateTime(y, m, d);
        var result = gregorianDate.ToString(CultureInfo.InvariantCulture);
        DateTime dt = Convert.ToDateTime(result);
        return dt;
    }

请注意,我CultureInfo.InvariantCulture是美国英语。

4

1 回答 1

2

正如 Clockwork-Muse 所说,DateTime 不维护对其转换的日历的引用,或者应该显示为,因此必须在 DateTime 对象之外维护此信息。这是一个示例解决方案:

using System;
using System.Globalization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Prepare to write the date and time data.
            string FileName = string.Format(@"C:\users\public\documents\{0}.txt", Guid.NewGuid());
            StreamWriter sw = new StreamWriter(FileName);

            //Create a Persian calendar class
            PersianCalendar pc = new PersianCalendar();

            // Create a date using the Persian calendar.
            DateTime wantedDate = pc.ToDateTime(1395, 4, 22, 12, 30, 0, 0);
            sw.WriteLine("Gregorian Calendar:  {0:O} ", wantedDate);
            sw.WriteLine("Persian Calendar:    {0}, {1}/{2}/{3} {4}:{5}:{6}\n",
                          pc.GetDayOfWeek(wantedDate),
                          pc.GetMonth(wantedDate),
                          pc.GetDayOfMonth(wantedDate),
                          pc.GetYear(wantedDate),
                          pc.GetHour(wantedDate),
                          pc.GetMinute(wantedDate),
                          pc.GetSecond(wantedDate));

            sw.Close();
        }
    }
}

结果是:

公历:2016-07-12T12:30:00.0000000

波斯历:1395 年 4 月 22 日星期二 12:30:0

阅读格式规范“O”,公历结果缺少任何时区指示,这意味着 DateTime 的“种类”是“未指定”。如果原始发布者知道并关心日期与哪个时区相关联,则应进行调整。

于 2016-01-24T17:31:32.433 回答