1

我有一个使用公历的应用程序DateTime。最近,我决定让应用程序也使用儒略历,如果用户需要的话(还有人使用这个日历)。起初事情似乎很容易。我可以在 DateTime 构造函数中指定使用的日历:

var calend = new JulianCalendar();
DateTime dt = new DateTime(year, j, i, calend);

我可以得到每个月的天数和星期几(这似乎与公历不同!):

int days = calend.GetDaysInMonth(year, month);
DayOfWeek dayOfWeek = dt.DayOfWeek;

现在,让我感到惊讶和困扰的是DateTime.ToString(). 它似乎打印了公历中的日期:

http://msdn.microsoft.com/en-us/library/system.globalization.juliancalendar%28v=vs.71%29.aspx

目前,CultureInfo 类支持的任何文化都不使用 JulianCalendar;因此,此类只能用于计算儒略历中的日期。

http://msdn.microsoft.com/en-us/library/9bksd5y7.aspx

由于不能将波斯日历指定为文化的默认日历,因此在波斯日历中显示日期需要单独调用其 PersianCalendar.GetMonth、PersianCalendar.GetDayOfMonth 和 PersianCalendar.GetYear 方法。

那么,在儒略历中打印日期最简单的方法是什么?

4

1 回答 1

0

使用扩展方法:

static class JulianPrinter
{
    public static string ToString(this DateTime date, string format, CultureInfo ci, Calendar cal)
    {
        if (format == "D")
            return string.Format("{0}, {1} {2} {3}",
                ci.DateTimeFormat.GetDayName(cal.GetDayOfWeek(date)),
                cal.GetDayOfMonth(date),
                ci.DateTimeFormat.MonthGenitiveNames[cal.GetMonth(date) - 1], //ci.DateTimeFormat.GetMonthName(cal.GetMonth(date)),
                cal.GetYear(date));
        return "";
    }
}

...和 ​​:

var calend = new JulianCalendar();
DateTime dt = new DateTime(year, j, i, calend);
string printed = dt.ToString("D", ci, calend);
于 2013-05-27T18:54:48.430 回答