Usando calendários para culturas específicas
Um aplicativo globalizado deve poderá exibir e usar calendários com base na cultura corrente.O .NET estrutura fornece a Calendar classe, bem sistema autônomo sistema autônomo seguintes implementações de classe:
The CultureInfo classe tem um Calendar propriedade que especifica o calendário padrão para uma cultura. Algumas culturas oferecem suporte a mais de um calendário.The OptionalCalendars propriedade especifica os calendários opcionais tem suportados neste tipo de cultura.
O exemplo de código a seguir cria CultureInfoobjetos para as culturas tailandês (Tailândia) designado "th-TH", e japonês (Japão) designado "ja-JP". O exemplo exibe os calendários padrão e opcionais para cada cultura.Observe que o GregorianCalendar objeto adicional é dividido em subtipos. The CalendarType propriedade especifica o subtipo do calendário gregoriano. Neste exemplo, sempre que o calendário é determinado como gregoriano, o CalendarType valor é recuperado e exibido. Para obter uma lista e uma explicação dos valores possíveis para CalendarType, consulte 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());
}
}
}
Este código produz a seguinte saída:
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
O exemplo de código a seguir ilustra métodos semelhantes como no DateTime estrutura e Calendar classe pode recuperar resultados diferentes para a mesma cultura. The CurrentCulturepara o segmento é conjunto para "he-IL" (hebraico em Israel), e o calendário corrente for conjunto o calendário hebraico. A DateTime tipo é criado e inicializado. Em seguida, membros de DateTime e Calendar são usadas para retornar o dia, mês, ano e número de meses do ano, e esses valores são exibidos. Somente o Calendar métodos da classe retornam o dia, mês, ano e número de meses do ano com base no calendário hebraico. DateTime métodos sempre use o calendário gregoriano para executar os cálculos, independentemente do calendário corrente.
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.");
}
}
Este código produz a seguinte saída:
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.
O exemplo de código a seguir mostra como os valores recuperados de dia, ano e mês corrente podem diferir, dependendo o calendário corrente é conjunto para uma cultura especificada.The CurrentCulturepara o segmento é conjunto "ja-JP" e o calendário é conjunto para JapaneseCalendar. O dia, mês e ano são retornados e exibidos.Em seguida, o calendário é definido como GregorianCalendare o dia, mês e ano são retornados e exibidos. Observe como o ano difere, dependendo o calendário corrente.O calendário japonês retorna o ano sistema autônomo 13, enquanto o calendário gregoriano retorna o ano de 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));
}
}
Este código produz a seguinte saída:
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
Consulte também
Conceitos
Formatação de data e time para uma cultura específica