2013-05-27 19 views
1

我有一個應用程序,我使用公曆日曆DateTime。最近,我決定讓應用程序也使用Julian日曆,如果用戶需要它(仍然有人在使用這個日曆)。起初事情似乎很簡單。我可以指定在DateTime構造所使用的日曆:DateTime和Julian日曆 - DateTime.ToString()有什麼問題?

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

我能得到天在每個月的數量和一週的一天(這似乎是從公曆不同!):

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

,最令我驚訝和困擾我的是WHE DateTime.ToString()輸出。看來,它打印在公曆日期:

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

目前,JulianCalendar不使用任何由CultureInfo類支持的文化 的;因此,此類只能使用 來計算Julian日曆中的日期。

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

因爲波斯曆法不能被指定爲默認 日曆文化,顯示在波斯曆法 日期要求其PersianCalendar.GetMonth單個呼叫, PersianCalendar.GetDayOfMonth ,和PersianCalendar.GetYear方法。

那麼,在Julian日曆中打印日期的最簡單方法是什麼?

回答

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);