Trước tiên, bạn phải lưu ý rằng bạn không thể đặt một ngày Jalali trong một đối tượng DateTime, bạn sẽ nhận được một ngoại lệ trong ngày như "1392/02/31".
Vì vậy, bạn phải xử lý ngày Jalali của bạn trong một chuỗi hoặc một loại DateTime tùy chỉnh.
Tôi khuyên bạn nên giữ ngày của bạn như một ngày Gregorian mọi lúc, và chuyển đổi nó khi bạn cần hiển thị nó.
Đây là một phương pháp mở rộng để có được Ngày Ba Tư từ một đối tượng 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
Và sau đó khi bạn có một cuộc hẹn Jalali ở định dạng chuỗi ở đây là phương pháp mở rộng để có được ngày Gregorian:
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}
Và bây giờ để xử lý chức năng bổ sung: Tên
Tuần:
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();
Tên tháng:
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();
Điều quan trọng nhất là không thể in tên các ngày trong tuần và tháng Ba Tư và chỉ in tên tiếng Ả Rập. Tên tháng Ba Tư là فروردین - اردیبهشت - خرداد vv và tên các ngày trong tuần Ba Tư là شنبه - یکشنبه vv Đây là tính hữu dụng hoàn toàn. – QMaster
Tôi đã kiểm tra mã này trên máy của mình và làm việc cho ngày Ba Tư, câu trả lời tuyệt vời. –