استخدام تقويمات لثقافات محددة
يجب أن يكون التطبيق المعمم يكون قادراً على عرض و استخدام التقويمات استناداً إلى الثقافة الحالية. يوفر .NET Framework فئة: Calendar بالإضافة إلى تطبيقات الفئات التالية:
تحتوي الفئة: CultureInfo على خاصية: Calendar التي تحدد التقويم الافتراضي الخاص بالثقافة. بعض الثقافات تدعم أكثر من تقويم. الخاصية: OptionalCalendars تقوم بتحديد التقويمات الاختيارية التي يدعمها بواسطة هذا النوع من الثقافة.
يقوم مثال التعليمات البرمجية التالي بإنشاء كائنات CultureInfo للثقافات التايلاندية (تايلاند) المعينة ب"th-TH" و اليابانية (اليابان) المعينة ب"ja-JP". يعرض المثال التقويمات الافتراضية و الاختيارية لكل ثقافة. لاحظ أن الكائن: GregorianCalendar يتم تقسيمه إلى أنواع فرعية. الخاصية: CalendarType تقوم بتحديد النوع الفرعي للتقويم الميلادي. في هذا المثال، كلما يتم تحديد التقويم أن يكون ميلادياً ، يتم استرداد و عرض القيمة: CalendarType . للحصول على قائمة بالقيم الممكنة و شرحها CalendarType راجع GregorianCalendarTypes.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class TestClass
Public Shared Sub Main()
' Creates a CultureInfo for Thai in Thailand.
Dim th As New CultureInfo("th-TH")
DisplayCalendars(th)
' Creates a CultureInfo for Japanese in Japan.
Dim ja As New CultureInfo("ja-JP")
DisplayCalendars(ja)
End Sub
Protected Shared Sub DisplayCalendars(cultureinfo As CultureInfo)
Dim ci As New CultureInfo(cultureinfo.ToString())
' Displays the default calendar for the culture.
If TypeOf ci.Calendar Is GregorianCalendar Then
Console.WriteLine(ControlChars.Newline + ControlChars.Newline + _
"The default calendar for the {0} culture is:" + _
ControlChars.Newline + " {1}" + ControlChars.Newline + _
ControlChars.Newline, ci.DisplayName.ToString(), _
ci.Calendar.ToString() + " subtype" + CType(ci.Calendar, _
GregorianCalendar).CalendarType.ToString())
Else
Console.WriteLine(ControlChars.Newline + ControlChars.Newline + _
"The default calendar for the {0} culture is:" + _
ControlChars.Newline + "{1}" + ControlChars.Newline + _
ControlChars.Newline, ci.DisplayName.ToString(),_
ci.Calendar.ToString())
End If
' Displays the optional calendars for the culture.
Console.WriteLine("The optional calendars for the {0} culture are: _
", ci.DisplayName.ToString())
Dim i As Integer
For i = ci.OptionalCalendars.GetLowerBound(0) To _
ci.OptionalCalendars.GetUpperBound(0)
If TypeOf ci.OptionalCalendars(i) Is GregorianCalendar Then
' Displays the calendar subtype.
Dim CalStr As [String] = ci.OptionalCalendars(i).ToString() _
+ " subtype " + CType(ci.OptionalCalendars(i), _
GregorianCalendar).CalendarType.ToString()
Console.WriteLine(CalStr)
Else
Console.WriteLine(ci.OptionalCalendars(i).ToString())
End If
Next i
End Sub
End Class
using System;
using System.Globalization;
public class TestClass
{
public static void Main()
{
// Creates a CultureInfo for Thai in Thailand.
CultureInfo th= new CultureInfo("th-TH");
DisplayCalendars(th);
// Creates a CultureInfo for Japanese in Japan.
CultureInfo ja= new CultureInfo("ja-JP");
DisplayCalendars(ja);
}
protected static void DisplayCalendars(CultureInfo cultureinfo)
{
CultureInfo ci = new CultureInfo(cultureinfo.ToString());
// Displays the default calendar for the culture.
if (ci.Calendar is GregorianCalendar)
Console.WriteLine ("\n\nThe default calendar for the {0} culture
is:\n {1}\n\n", ci.DisplayName.ToString(),
ci.Calendar.ToString() + " subtype " +
((GregorianCalendar)ci.Calendar).CalendarType.ToString());
else
Console.WriteLine ("\n\nThe default calendar for the {0} culture
is: \n{1}\n\n", ci.DisplayName.ToString(),
ci.Calendar.ToString());
// Displays the optional calendars for the culture.
Console.WriteLine ("The optional calendars for the {0} culture are:
", ci.DisplayName.ToString());
for (int i = ci.OptionalCalendars.GetLowerBound(0); i <=
ci.OptionalCalendars.GetUpperBound(0); i++ )
{
if (ci.OptionalCalendars[i] is GregorianCalendar)
{
// Displays the calendar subtype.
String CalStr = (ci.OptionalCalendars[i].ToString() + "
subtype " + ((GregorianCalendar)ci.OptionalCalendars[i]).CalendarType.ToString());
Console.WriteLine(CalStr);
}
else
Console.WriteLine (ci.OptionalCalendars[i].ToString());
}
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
The default calendar for the Thai (Thailand) culture is:
System.Globalization.ThaiBuddhistCalendar
The optional calendars for the Thai (Thailand) culture are:
System.Globalization.ThaiBuddhistCalendar
System.Globalization.GregorianCalendar subtype Localized
The default calendar for the Japanese (Japan) culture is:
System.Globalization.GregorianCalendar subtype Localized
The optional calendars for the Japanese (Japan) culture are:
System.Globalization.JapaneseCalendar
System.Globalization.GregorianCalendar subtype USEnglish
System.Globalization.GregorianCalendar subtype Localized
يوضح مثال التعليمات البرمجية التالي كيفية أن الأساليب المتشابهة في البنية DateTime و الفئة Calendar يمكنها استرداد نتائج مختلفة لنفس الثقافة. CurrentCulture لمؤشر الترابط يتم تعيينها إلى "he-IL" (عبري في إسرائيل) و يتم تعيين التقويم الحالي إلى التقويم العبري. و يتم إنشاء و تهيئة نوع: DateTime. و بعد ذلك، تُستخدم DateTime و Calendar لإرجاع اليوم و الشهر و السنة و عدد الأشهر في السنة ثم يتم عرض هذه القيم. فقط Calendarوظائف الفئة العودة يوم، والشهر، والسنة، و عدد الأشهر في السنة يستند تقويم العبري. DateTimeوظائف دوماً باستخدام تقويم الميلادي إلى إجراء العمليات الحسابية، بغض النظر تقويم الحالي.
Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class TestClass
Public Shared Sub Main()
' Creates a CultureInfo for Hebrew in Israel.
Dim he As New CultureInfo("he-IL")
he.DateTimeFormat.Calendar = New HebrewCalendar()
Console.WriteLine(ControlChars.Newline + ControlChars.Newline _
+ "The current calendar set for the {0} culture is:" + _
ControlChars.Newline + " {1}", he.DisplayName.ToString(), _
he.DateTimeFormat.Calendar.ToString())
Dim dt As New DateTime(5760, 11, 4, he.DateTimeFormat.Calendar)
Console.WriteLine(ControlChars.Newline + " The DateTime _
returns the day as: {0}", dt.Day)
Console.WriteLine(ControlChars.Newline + " The Calendar class _
returns the day as: {0}", _
he.DateTimeFormat.Calendar.GetDayOfMonth(dt))
Console.WriteLine(ControlChars.Newline + " The DateTime _
returns the month as: {0}", dt.Month)
Console.WriteLine(ControlChars.Newline + " The Calendar class _
returns the month as: {0}", _
he.DateTimeFormat.Calendar.GetMonth(dt))
Console.WriteLine(ControlChars.Newline + " The DateTime _
returns the Year as: {0}", dt.Year)
Console.WriteLine(ControlChars.Newline + " The Calendar class _
returns the Year as: {0}", _
he.DateTimeFormat.Calendar.GetYear(dt))
Console.WriteLine(ControlChars.Newline + " The Calendar class _
returns the number of months in the year {0} as: {1}", _
he.DateTimeFormat.Calendar.GetYear(dt), _
he.DateTimeFormat.Calendar.GetMonthsInYear _
(he.DateTimeFormat.Calendar.GetYear(dt))
Console.WriteLine(ControlChars.Newline + " The DateTime does _
not return the number of months in a year " + _
ControlChars.Newline + " because it uses the Gregorian _
calendar, which always has twelve months.")
End Sub
End Class
using System;
using System.Threading;
using System.Globalization;
public class TestClass
{
public static void Main()
{
// Creates a CultureInfo for Hebrew in Israel.
CultureInfo he= new CultureInfo("he-IL");
Thread.CurrentThread.CurrentCulture = he;
he.DateTimeFormat.Calendar = new HebrewCalendar();
Console.WriteLine ("\n\nThe current calendar set for the {0} culture
is:\n {1}", he.DisplayName.ToString(),
he.DateTimeFormat.Calendar.ToString());
DateTime dt = new DateTime(5760, 11, 4, he.DateTimeFormat.Calendar);
Console.WriteLine ("\nThe DateTime returns the day as: {0}",
dt.Day);
Console.WriteLine ("\nThe Calendar class returns the day as: {0}",
he.DateTimeFormat.Calendar.GetDayOfMonth(dt));
Console.WriteLine ("\nThe DateTime returns the month as:
{0}", dt.Month);
Console.WriteLine ("\nThe Calendar class returns the month as:
{0}", he.DateTimeFormat.Calendar.GetMonth(dt));
Console.WriteLine ("\nThe DateTime returns the year as: {0}",
dt.Year);
Console.WriteLine ("\nThe Calendar class returns the year as: {0}",
he.DateTimeFormat.Calendar.GetYear(dt));
Console.WriteLine ("\nThe Calendar class returns the number of
months in the year {0} as:
{1}",he.DateTimeFormat.Calendar.GetYear(dt),
he.DateTimeFormat.Calendar.GetMonthsInYear
(he.DateTimeFormat.Calendar.GetYear(dt)));
Console.WriteLine ("\nThe DateTime does not return the number
of months in a year \nbecause it uses the Gregorian calendar,
which always has twelve months.");
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
The current calendar set for the Hebrew (Israel) culture is:
System.Globalization.HebrewCalendar
The DateTime returns the day as: 7
The Calendar class returns the day as: 4
The DateTime returns the month as: 7
The Calendar class returns the month as: 11
The DateTime returns the year as: 2000
The Calendar class returns the year as: 5760
The Calendar class returns the number of months in the year 5760 as: 13
The DateTime does not return the number of months in a year
because it uses the Gregorian calendar, which always has twelve months.
يوضح مثال التعليمات البرمجية التالي كيف أن القيم التي تم استردادها للشهر و اليوم و السنة الحاليين يمكن أن تختلف استنادًا إلى التقويم الحالي الذي يتم تعيينه لثقافة محددة. CurrentCulture الخاص بمؤشر الترابط يتم تعيينه إلى "ja-JP" و التقويم يتم تعيينه إلى JapaneseCalendar. يتم إرجاع اليوم و الشهر و السنة و عرضهم. التالي، تقويم هو معينة إلى GregorianCalendar ويتم إرجاع يوم والشهر والسنة و dهوplayed. لاحظ اختلاف السنة حسب التقويم الحالي. التقويم الياباني يرجع السنة "13" ، و لكن التقويم الميلادي يرجع السنة "2001".
Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class TestClass
Public Shared Sub Main()
Dim dt As DateTime = DateTime.Now
' Creates a CultureInfo for Japanese in Japan.
Dim jp As New CultureInfo("ja-JP")
jp.DateTimeFormat.Calendar = New JapaneseCalendar()
Console.WriteLine(ControlChars.Newline + ControlChars.Newline + _
"The current calendar set for the {0} culture is:" + _
ControlChars.Newline + " {1}", jp.DisplayName.ToString(), _
jp.DateTimeFormat.Calendar.ToString())
Console.WriteLine(ControlChars.Newline + " The day is: {0}", _
jp.DateTimeFormat.Calendar.GetDayOfMonth(dt))
Console.WriteLine(ControlChars.Newline + " The month is: {0}", _
jp.DateTimeFormat.Calendar.GetMonth(dt))
Console.WriteLine(ControlChars.Newline + " The year is: {0}", _
jp.DateTimeFormat.Calendar.GetYear(dt))
jp.DateTimeFormat.Calendar = New GregorianCalendar()
Console.WriteLine(ControlChars.Newline + ControlChars.Newline + _
"The current calendar set for the {0} culture is:" + _
ControlChars.Newline + " {1}", jp.DisplayName.ToString(), _
jp.DateTimeFormat.Calendar.ToString())
Console.WriteLine(ControlChars.Newline + " The day is: {0}", _
jp.DateTimeFormat.Calendar.GetDayOfMonth(dt))
Console.WriteLine(ControlChars.Newline + " The month is: {0}", _
jp.DateTimeFormat.Calendar.GetMonth(dt))
Console.WriteLine(ControlChars.Newline + " The year is: {0}", _
jp.DateTimeFormat.Calendar.GetYear(dt))
End Sub
End Class
using System;
using System.Threading;
using System.Globalization;
public class TestClass
{
public static void Main()
{
DateTime dt = DateTime.Now;
// Creates a CultureInfo for Japanese in Japan.
CultureInfo jp = new CultureInfo("ja-JP");
Thread.CurrentThread.CurrentCulture = jp;
jp.DateTimeFormat.Calendar = new JapaneseCalendar();
Console.WriteLine ("\n\nThe current calendar set for the {0} culture
is:\n {1}", jp.DisplayName.ToString(),
jp.DateTimeFormat.Calendar.ToString());
Console.WriteLine ("\nThe day is: {0}",
jp.DateTimeFormat.Calendar.GetDayOfMonth(dt));
Console.WriteLine ("\nThe month is: {0}",
jp.DateTimeFormat.Calendar.GetMonth(dt));
Console.WriteLine ("\nThe year is: {0}",
jp.DateTimeFormat.Calendar.GetYear(dt));
jp.DateTimeFormat.Calendar = new GregorianCalendar();
Console.WriteLine ("\n\nThe current calendar set for the {0} culture
is:\n {1}", jp.DisplayName.ToString(),
jp.DateTimeFormat.Calendar.ToString());
Console.WriteLine ("\nThe day is: {0}",
jp.DateTimeFormat.Calendar.GetDayOfMonth(dt));
Console.WriteLine ("\nThe month is: {0}",
jp.DateTimeFormat.Calendar.GetMonth(dt));
Console.WriteLine ("\nThe year is: {0}",
jp.DateTimeFormat.Calendar.GetYear(dt));
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
The current calendar set for the Japanese (Japan) culture is:
System.Globalization.JapaneseCalendar
The day is: 3
The month is: 8
The year is: 13
The current calendar set for the Japanese (Japan) culture is:
System.Globalization.GregorianCalendar
The day is: 3
The month is: 8
The year is: 2001
راجع أيضًا:
المبادئ
تنسيق التاريخ و الوقت لثقافة معينة