OS 문화가 무엇인지에 관계없이 원하는대로 응용 프로그램 문화권을 설정하고 싶습니다. 이것을 얻으려면 문화권으로 "fa-IR"이있는 CultureInfo 클래스를 사용했지만 .NET PersianCalendar 클래스가 아닌 기본 달력으로 "GregorianCalendar"를 사용했습니다. 그래서 난 내 고객 문화를 구현하는 CultureInfo를에서 새 클래스를 파생하려고 :.NET CultureInfo 클래스에서 사용자 지정 culture를 파생시키는 방법은 무엇입니까?
/// <summary>
/// Represents culture specific information, Persian calendar and number format info for Iran.
/// </summary>
public class PersianCultureInfo : CultureInfo
{
private Calendar _calendar = new PersianCalendar();
public PersianCultureInfo()
: base("fa-IR", true)
{
}
/// <summary>
/// Persian calendar with solar system algorithm for Iran.
/// </summary>
public override Calendar Calendar
{
get
{
return this._calendar;
}
}
public static PersianCultureInfo Create()
{
PersianCultureInfo culture = new PersianCultureInfo();
culture.PerpareDateTimeFormatInfo();
return culture;
}
private void PerpareDateTimeFormatInfo()
{
this.DateTimeFormat.Calendar = this.Calendar;
this.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;
}
}
문제는 DateTimeFormat 속성은 다음과 같은 예외가 발생한다는 것입니다 :
Not a valid calendar for the given culture.
Parameter name: value
그래서 나는 OptionalCalendars 속성을 재정의하는 시도를
public override Calendar[] OptionalCalendars
{
get
{
return base.OptionalCalendars.Concat<Calendar>(new Calendar[1] { new PersianCalendar() }).ToArray<Calendar>();
}
}
그러나 해결 didnt한다 :별로 목록 만 해 GregorianCalendar와 HijriCalendar 포함 기본 있기 때문에, 그들에게 PersianCalendar를 추가 문제. 뭐가 잘못 되었 니? 어떻게하면 CultureInfo 및 DateTimeFormat의 기본 달력으로 PersianCalendar를 올바른 방식으로 설정할 수 있습니까?
어쩌면이 링크 도움이 당신에게 더 많은 동포 :) http://www.codeproject.com/Articles/17495/ Persian-DateTime – Arash