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