2 回答

TA貢獻1793條經驗 獲得超6個贊
您需要覆蓋文化日歷,并且還需要接收波斯名稱,您也需要覆蓋它們....
大致是這樣的:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
namespace Ravis24.Helpers
{
public class PersianCulture : CultureInfo
{
private readonly System.Globalization.Calendar cal;
private readonly System.Globalization.Calendar[] optionals;
public PersianCulture()
: this("fa-IR", true)
{ }
public PersianCulture(string cultureName, bool useUserOverride)
: base(cultureName, useUserOverride)
{
cal = base.OptionalCalendars[0];
var optionalCalendars = new List<System.Globalization.Calendar>();
optionalCalendars.AddRange(base.OptionalCalendars);
optionalCalendars.Insert(0, new PersianCalendar());
Type formatType = typeof(DateTimeFormatInfo);
Type calendarType = typeof(System.Globalization.Calendar);
PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars", BindingFlags.Instance | BindingFlags.NonPublic);
var newOptionalCalendarIDs = new Int32[optionalCalendars.Count];
for (int i = 0; i < newOptionalCalendarIDs.Length; i++)
newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null);
optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs);
optionals = optionalCalendars.ToArray();
cal = optionals[0];
DateTimeFormat.Calendar = optionals[0];
DateTimeFormat.MonthNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };
DateTimeFormat.MonthGenitiveNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };
DateTimeFormat.AbbreviatedMonthNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };
DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????", "" };
DateTimeFormat.AbbreviatedDayNames = new string[] { "?", "?", "?", "?", "?", "?", "?" };
DateTimeFormat.ShortestDayNames = new string[] { "?", "?", "?", "?", "?", "?", "?" };
DateTimeFormat.DayNames = new string[] { "??????", "??????", "??????", "????????", "???????", "????", "????" };
DateTimeFormat.AMDesignator = "?.?";
DateTimeFormat.PMDesignator = "?.?";
DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
DateTimeFormat.ShortTimePattern = "HH:mm";
DateTimeFormat.LongTimePattern = "HH:mm:ss";
DateTimeFormat.FullDateTimePattern = "yyyy/MM/dd HH:mm:ss";
}
public override System.Globalization.Calendar Calendar
{
get { return cal; }
}
public override System.Globalization.Calendar[] OptionalCalendars
{
get { return optionals; }
}
public static DateTime PersianToGregorianUS(DateTime faDate)
{
return new PersianCalendar().ToDateTime(faDate.Year, faDate.Month, faDate.Day, faDate.Hour, faDate.Minute, faDate.Second, faDate.Millisecond);
}
}
}

TA貢獻1772條經驗 獲得超8個贊
試試這個:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");
var date = new DateTime(1999, 1, 18);
var strDate = date.ToString("yyyy/MM/dd", CultureInfo.GetCultureInfo("fa-IR"));
Console.WriteLine(strDate);
Console.ReadKey();
這給出了輸出“1377/10/28”
- 2 回答
- 0 關注
- 79 瀏覽
添加回答
舉報