2011-07-24 13 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(); 
相关问题