我想自定義日曆波斯但設置的CultureInfo,因爲這之後:本月如何自定義CultureInfo的默認日曆?
CultureInfo fa = new CultureInfo("fa-IR",true);
Thread.CurrentThread.CurrentCulture = fa;
名稱,幾天不更改,因此決定來覆蓋默認日曆。
我該怎麼做?
我想自定義日曆波斯但設置的CultureInfo,因爲這之後:本月如何自定義CultureInfo的默認日曆?
CultureInfo fa = new CultureInfo("fa-IR",true);
Thread.CurrentThread.CurrentCulture = fa;
名稱,幾天不更改,因此決定來覆蓋默認日曆。
我該怎麼做?
您可以創建CultureInfo
的子類。它的屬性將不會是隻讀的,你可以分配給它..
你可以在呈現控件之前設置線程的CultureInfo,並在呈現控件時恢復。
輸出:
下面的例子展示的如何可以呈現不同的CultureInfo兩個不同的日曆。
Default.aspx的
<%@Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Import Namespace="System.Threading" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<% Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");%>
<asp:Calendar ID="Calendar1" runat="server">
</asp:Calendar>
<%
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
%>
<asp:Calendar ID="Calendar2" runat="server"></asp:Calendar>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Threading;
using System.Globalization;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
在'PageLoad'或你說的地方使用這段代碼有什麼區別? – 2013-04-04 17:46:31
不,頁面加載完全一樣,我沒有改變任何東西 – 2013-04-04 17:47:12
@majidgeek - 更新! – 2013-04-04 18:55:27
壓倒一切的初學者和我一樣:
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 = "ب.ظ";
}
public override System.Globalization.Calendar Calendar
{
get { return cal; }
}
public override System.Globalization.Calendar[] OptionalCalendars
{
get { return optionals; }
}
}
然後在Page_Load
:
PersianCulture fa = new PersianCulture();
Thread.CurrentThread.CurrentCulture = fa;
表格here
謝謝。但是,在> = .NET4.5中,'System.Globalization.CultureTableRecord'類不能在'typeof(DateTimeFormatInfo).Assembly' – FindOutIslamNow 2017-11-30 11:33:35
你的申請是什麼? Winforms,WPF,ASP.Net?這個日曆控件是什麼? – ken2k 2013-04-04 17:15:31
我用'asp:Calendar'使用ASP.NET 4 – 2013-04-04 17:19:57