如何在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); } 

这引发了exception

不是给定文化的有效日历

首先,您必须注意,您不能将Jalali日期放在DateTime对象中,您将在“1392/02/31”之类的日期中获得exception。

因此,您必须以字符串或自定义DateTime类型处理Jalali日期。

我建议您将日期保持为公历日期,并在需要显示时将其转换。

这是从DateTime对象获取波斯日期的扩展方法。

  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 

然后当你有一个字符串格式的Jalali日期时,这里是获取格里高利日期的扩展方法:

  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} 

现在要处理额外的function:

周名称:

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

试试这样:

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

如果您将格式更改为例如"yyyy MMM ddd"您将获得2011 جوييه الأحد

你可以用这个:

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