Verwenden von Kalendern für bestimmte Kulturen
Eine globalisierte Anwendung sollte in der Lage sein, Kalender entsprechend der aktuellen Kultur anzuzeigen und zu verwenden. .NET Framework stellt sowohl die Calendar-Klasse als auch folgende Calendar-Implementierungen bereit: GregorianCalendar, HebrewCalendar, HijriCalendar, JapaneseCalendar, JulianCalendar, KoreanCalendar, TaiwanCalendar und ThaiBuddhistCalendar.
Die CultureInfo-Klasse bietet eine CultureInfo.Calendar-Eigenschaft, die den Standardkalender für eine Kultur festlegt. Einige Kulturen unterstützen mehr als einen Kalender. Die CultureInfo.OptionalCalendars-Eigenschaft legt die optional verwendbaren Kalender einer Kultur fest.
Das folgende Codebeispiel erstellt CultureInfo-Objekte für die Kulturen "th-TH" (Thai (Thailand)) und "ja-JP" (Japanisch (Japan)) und zeigt den standardmäßigen und die optionalen Kalender für jede Kultur an. Beachten Sie, dass der GregorianCalendar in weitere Untertypen unterteilt ist. Die GregorianCalendar.CalendarType-Eigenschaft legt den Untertyp des gregorianischen Kalenders fest. In diesem Beispiel wird jedes Mal, wenn als Kalender der gregorianische festgelegt wird, der CalendarType-Wert abgerufen und angezeigt. Eine Liste und Erläuterungen zu den möglichen Werten für CalendarType finden Sie unter GregorianCalendarTypes-Enumeration.
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());
}
}
}
Dieser Code erzeugt die folgende Ausgabe:
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
Das folgende Codebeispiel zeigt, wie ähnliche Methoden in der DateTime-Struktur und der Calendar-Klasse unterschiedliche Ergebnisse für dieselbe Kultur liefern. CurrentCulture wird auf "he-IL" (Hebräisch (Israel)) festgelegt, und der aktuelle Kalender wird auf HebrewCalendar festgelegt. Es wird ein DateTime-Typ erstellt und initialisiert. Anschließend werden die Member von DateTime und Calendar verwendet, um den Tag, den Monat, das Jahr und die Anzahl der Monate im Jahr zurückzugeben. Diese Werte werden dann angezeigt. Nur die Methoden der Calendar-Klasse geben den Tag, den Monat, das Jahr und die Anzahl der Monate des Jahres basierend auf dem hebräischen Kalender zurück. DateTime-Methoden verwenden immer den gregorianischen Kalender, um Berechnungen unabhängig vom aktuellen Kalender durchzuführen.
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 class _
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 class _
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 class _
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 class 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 class 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 class 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 class 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 class does not return the number
of months in a year \nbecause it uses the Gregorian calendar,
which always has twelve months.");
}
}
Dieser Code erzeugt die folgende Ausgabe:
The current calendar set for the Hebrew (Israel) culture is:
System.Globalization.HebrewCalendar
The DateTime class returns the day as: 7
The Calendar class returns the day as: 4
The DateTime class returns the month as: 7
The Calendar class returns the month as: 11
The DateTime class 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 class does not return the number of months in a year
because it uses the Gregorian calendar, which always has twelve months.
Das folgende Codebeispiel zeigt, wie sich die zurückgegebenen Werte für den aktuellen Monat, den Tag und das Jahr in Abhängigkeit vom aktuellen Kalender, der für eine bestimmte Kultur festgelegt wurde, unterscheiden können. CurrentCulture wird auf "ja-JP" und der Kalender auf JapaneseCalendar festgelegt. Tag, Monat und Jahr werden zurückgegeben und angezeigt. Dann wird der Kalender auf GregorianCalendar festgelegt und der Tag, der Monat und das Jahr werden angezeigt. Beachten Sie, wie sich das Jahr in Abhängigkeit vom aktuellen Kalender unterscheidet. JapaneseCalendar gibt das Jahr als 13 zurück, während GregorianCalendar das Jahr als 2001 zurückgibt.
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));
}
}
Dieser Code erzeugt die folgende Ausgabe:
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
Siehe auch
Referenz
Konzepte
Formatieren von Datum und Uhrzeit für eine bestimmte Kultur