用波斯语打印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);
}
抛出异常
不是给定区域性的有效日历
首先,您必须注意,您不能在DateTime对象中放置Jalali日期,您将在"1392/02/31"这样的日期中得到异常。
所以你必须用字符串或自定义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
然后当你有一个字符串格式的贾拉利日期时这里是获取公历日期的扩展方法:
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();
试试:
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));
}
我创建这个静态类结果将以这种格式显示سه شنبه 28 اسفند 1398
public static class PersianDateString
{
private static string[] Days = { "یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
private static string[] Months = { "فروردین", "اریبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن" , "اسفند" };
private static PersianCalendar pc = new PersianCalendar();
public static string ToPersianDateString(this DateTime date)
{
return ($"{Days[pc.GetDayOfWeek(date).GetHashCode()]} {pc.GetDayOfMonth(date)} {Months[pc.GetMonth(date) - 1]} {pc.GetYear(date)}");
}
}
使用string ptime = DateTime.Now.ToPersianDateString();
这个接缝也可以:
DateTime d= DateTime.Now;
Console.WriteLine( d.ToString("yyyy/MM/dd", new CultureInfo("fa-IR")) );
Outbut:
1399/06/26