2011-07-24 35 views
18

在波斯語中打印c#DateTime最簡單的方法是什麼? 我目前使用:如何在C#中以波斯語格式打印DateTime?

static public string PersianDateString(DateTime d) 
{ 
    CultureInfo faIR = new CultureInfo("fa-IR"); 
    faIR.DateTimeFormat.Calendar = new PersianCalendar();    
    return d.ToString("yyyy/MM/dd", faIR); 
} 

會拋出一個異常

不是有效的日曆爲特定的文化

回答

7

嘗試這樣的:

public static string PersianDateString(DateTime d) 
{ 
    CultureInfo faIR = new CultureInfo("fa-IR"); 
    return d.ToString("yyyy/MM/dd", faIR); 
} 

和如果您將格式更改爲例如"yyyy MMM ddd" you w應該得到2011 جوييه الأحد

+1

最重要的是它不能打印波斯的星期幾和月份名稱,只是打印阿拉伯名字。波斯月名是فروردین - اردیبهشت - خرداد等和波斯週日名稱是شنبه - یکشنبه等。這是完全有用的。 – QMaster

+0

我在我的機器上測試了這段代碼,併爲波斯日期工作,很好的答案。 –

2

您可以使用此:

static public string PersianDateString(DateTime d) 
{ 
    var pc = new PersianCalendar(); 
    return string.Format("{0:0000}/{1:00}/{2:00}", 
     pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)); 
} 
+0

這只是將日期轉換爲波斯語。你必須得到有用的觀點。關於格式化爲波斯日期的問題。像這樣:چهارشنبه。你的答案是1392,你的答案是有用的。 – QMaster

23

首先,你一定要注意,你不能把一個賈拉利日期的DateTime對象,你會得到像「1392年2月31日」的日期異常。

因此,您必須在字符串或自定義DateTime類型中處理Jalali日期。

我建議您始終將您的日期保存爲公曆,並在需要顯示日期時進行轉換。

這是從DateTime對象獲取Persian Date的擴展方法。

public static string GetPersianDate(this DateTime date) 
    { 
     PersianCalendar jc = new PersianCalendar(); 
     return string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date)); 
    } 
    //How to use it: 
    DateTime d = new DateTime(2014, 05, 21); 
    string s = d.GetPersianDate(); //1393/02/31 

然後當你在字符串格式的賈拉利日期這裏是擴展方法來獲得公曆日期:

public static DateTime GetDateTimeFromJalaliString(this string jalaliDate) 
    { 
     PersianCalendar jc = new PersianCalendar(); 

     try 
     { 
      string[] date = jalaliDate.Split('/'); 
      int year = Convert.ToInt32(date[0]); 
      int month = Convert.ToInt32(date[1]); 
      int day = Convert.ToInt32(date[2]); 

      DateTime d = jc.ToDateTime(year, month, day, 0, 0, 0, 0, PersianCalendar.PersianEra); 

      return d; 
     } 
     catch 
     { 
      throw new FormatException("The input string must be in 0000/00/00 format."); 
     } 
    } 
    //How to use it: 
    string pdate = "1392/02/31"; 
    DateTime dateFromJalali = pdate.GetDateTimeFromJalaliString(); //{5/21/2014 12:00:00 AM} 

現在來處理額外的功能:

周名稱:

public static string GetDayOfWeekName(this DateTime date) 
    { 
     switch (date.DayOfWeek) 
     { 
      case DayOfWeek.Saturday: return "شنبه"; 
      case DayOfWeek.Sunday: return "يکشنبه"; 
      case DayOfWeek.Monday: return "دوشنبه"; 
      case DayOfWeek.Tuesday: return "سه‏ شنبه"; 
      case DayOfWeek.Wednesday: return "چهارشنبه"; 
      case DayOfWeek.Thursday: return "پنجشنبه"; 
      case DayOfWeek.Friday: return "جمعه"; 
      default: return ""; 
     } 
    } 
    //How to use it: 
    DateTime date = DateTime.Now; 
    string wname = date.GetDayOfWeekName(); 

月份名稱:

public static string GetMonthName(this DateTime date) 
    { 
      PersianCalendar jc = new PersianCalendar(); 
      string pdate = string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date)); 

      string[] dates = pdate.Split('/'); 
      int month = Convert.ToInt32(dates[1]); 

      switch (month) 
      { 
       case 1: return "فررودين"; 
       case 2: return "ارديبهشت"; 
       case 3: return "خرداد"; 
       case 4: return "تير‏"; 
       case 5: return "مرداد"; 
       case 6: return "شهريور"; 
       case 7: return "مهر"; 
       case 8: return "آبان"; 
       case 9: return "آذر"; 
       case 10: return "دي"; 
       case 11: return "بهمن"; 
       case 12: return "اسفند"; 
       default: return ""; 
      } 

    } 
    //How to use it: 
    DateTime date = DateTime.Now; 
    string mname = date.GetMonthName();