Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

DateTimeFormatInfo.Calendar Property

Definition

Namespace:
System.Globalization
Assemblies:
mscorlib.dll, System.Globalization.dll
Assemblies:
netstandard.dll, System.Runtime.dll
Assembly:
System.Globalization.dll
Assembly:
System.Runtime.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
DateTimeFormatInfo.cs
Source:
DateTimeFormatInfo.cs
Source:
DateTimeFormatInfo.cs
Source:
DateTimeFormatInfo.cs
Source:
DateTimeFormatInfo.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Gets or sets the calendar to use for the current culture.

public:
 property System::Globalization::Calendar ^ Calendar { System::Globalization::Calendar ^ get(); void set(System::Globalization::Calendar ^ value); };
public System.Globalization.Calendar Calendar { get; set; }
member this.Calendar : System.Globalization.Calendar with get, set
Public Property Calendar As Calendar

Property Value

The calendar to use for the current culture. The default for InvariantInfo is a GregorianCalendar object.

Exceptions

The property is being set to null.

The property is being set to a Calendar object that is not valid for the current culture.

The property is being set and the DateTimeFormatInfo object is read-only.

Examples

The following example defines a ChangeCalendar method that changes a culture's current calendar to a specified calendar unless it is already the current calendar or if it is not supported by the culture. The code that calls the method instantiates a CultureInfo object that represents the Arabic (Egypt) culture and first attempts to change its calendar to the Japanese calendar. Because the Japanese calendar is not supported, the method makes not change the culture's calendar. However, because the Umm al-Qura calendar is a member of the CultureInfo.OptionalCalendars collection, the method does succeed in making it the current calendar for the ar-EG culture.

using System;
using System.Globalization;

public class Example
{
 public static void Main()
 {
 CultureInfo ci = CultureInfo.CreateSpecificCulture("ar-EG");
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name,
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar));

 CalendarUtilities.ChangeCalendar(ci, new JapaneseCalendar());
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name,
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar));

 CalendarUtilities.ChangeCalendar(ci, new UmAlQuraCalendar());
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name,
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar));
 }
}

public class CalendarUtilities
{
 private Calendar newCal;
 private bool isGregorian;

 public static void ChangeCalendar(CultureInfo ci, Calendar cal)
 {
 CalendarUtilities util = new CalendarUtilities(cal);

 // Is the new calendar already the current calendar?
 if (util.CalendarExists(ci.DateTimeFormat.Calendar))
 return;

 // Is the new calendar supported?
 if (Array.Exists(ci.OptionalCalendars, util.CalendarExists))
 ci.DateTimeFormat.Calendar = cal;
 }

 private CalendarUtilities(Calendar cal)
 {
 newCal = cal;

 // Is the new calendar a Gregorian calendar?
 isGregorian = cal.GetType().Name.Contains("Gregorian");
 }

 private bool CalendarExists(Calendar cal)
 {
 if (cal.ToString() == newCal.ToString()) {
 if (isGregorian) {
 if (((GregorianCalendar) cal).CalendarType ==
 ((GregorianCalendar) newCal).CalendarType)
 return true;
 }
 else {
 return true;
 }
 }
 return false;
 }

 public static string ShowCalendarName(Calendar cal)
 {
 string calName = cal.ToString().Replace("System.Globalization.", "");
 if (cal is GregorianCalendar)
 calName += ", Type " + ((GregorianCalendar) cal).CalendarType.ToString();

 return calName;
 }
}
// The example displays the following output:
// The current calendar for the ar-EG culture is GregorianCalendar, Type Localized
// The current calendar for the ar-EG culture is GregorianCalendar, Type Localized
// The current calendar for the ar-EG culture is UmAlQuraCalendar
Imports System.Globalization

Module Example
 Public Sub Main()
 Dim ci As CultureInfo = CultureInfo.CreateSpecificCulture("ar-EG")
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name, 
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar))

 CalendarUtilities.ChangeCalendar(ci, New JapaneseCalendar())
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name, 
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar))
 
 CalendarUtilities.ChangeCalendar(ci, New UmAlQuraCalendar())
 Console.WriteLine("The current calendar for the {0} culture is {1}",
 ci.Name, 
 CalendarUtilities.ShowCalendarName(ci.DateTimeFormat.Calendar))
 End Sub
End Module

Public Class CalendarUtilities
 Private newCal As Calendar
 Private isGregorian As Boolean
 
 Public Shared Sub ChangeCalendar(ci As CultureInfo, cal As Calendar)
 Dim util As New CalendarUtilities(cal)
 
 ' Is the new calendar already the current calendar?
 If util.CalendarExists(ci.DateTimeFormat.Calendar) Then
 Exit Sub
 End If

 ' Is the new calendar supported?
 If Array.Exists(ci.OptionalCalendars, AddressOf util.CalendarExists) Then
 ci.DateTimeFormat.Calendar = cal
 End If
 End Sub
 
 Private Sub New(cal As Calendar)
 newCal = cal
 
 ' Is the new calendar a Gregorian calendar?
 isGregorian = cal.GetType().Name.Contains("Gregorian")
 End Sub
 
 Private Function CalendarExists(cal As Calendar) As Boolean
 If cal.ToString() = newCal.ToString Then
 If isGregorian Then
 If CType(cal, GregorianCalendar).CalendarType = 
 CType(newCal, GregorianCalendar).CalendarType Then
 Return True
 End If
 Else
 Return True
 End If
 End If
 Return False
 End Function

 Public Shared Function ShowCalendarName(cal As Calendar) As String
 Dim calName As String = cal.ToString().Replace("System.Globalization.", "")
 If TypeOf cal Is GregorianCalendar Then
 calName += ", Type " + CType(cal, GregorianCalendar).CalendarType.ToString()
 End If
 Return calName 
 End Function
End Class
' The example displays the following output:
' The current calendar for the ar-EG culture is GregorianCalendar, Type Localized
' The current calendar for the ar-EG culture is GregorianCalendar, Type Localized
' The current calendar for the ar-EG culture is UmAlQuraCalendar

Remarks

The Calendar property accepts only calendars that are valid for the culture that is associated with the DateTimeFormatInfo object. The CultureInfo.OptionalCalendars property specifies the calendars that can be used by a particular culture, and the CultureInfo.Calendar property specifies the default calendar for the culture.

Important

Eras in the Japanese calendars are based on the emperor's reign and are therefore expected to change. For example, May 1, 2019 marked the beginning of the Reiwa era in the JapaneseCalendar and JapaneseLunisolarCalendar. Such a change of era affects all applications that use these calendars. For more information and to determine whether your applications are affected, see Handling a new era in the Japanese calendar in .NET. For information on testing your applications on Windows systems to ensure their readiness for the era change, see Prepare your application for the Japanese era change. For features in .NET that support calendars with multiple eras and for best practices when working with calendars that support multiple eras, see Working with eras.

Changing the value of this property affects the following properties as well: MonthNames, AbbreviatedMonthNames, DayNames, AbbreviatedDayNames, CalendarWeekRule, FirstDayOfWeek, FullDateTimePattern, LongDatePattern, ShortDatePattern, YearMonthPattern, and MonthDayPattern.

For example, if the culture of the current thread is Japanese, this property accepts JapaneseCalendar, LocalizedGregorianCalendar, or USEnglishGregorianCalendar. When the JapaneseCalendar is used, the default long date specifier is "gg y'\x5e74'M'\x6708'd'\x65e5'". When the LocalizedGregorianCalendar, is used, the default long date specifier is "yyyy'\x5e74'M'\x6708'd'\x65e5'".

Applies to

See also


Feedback

Was this page helpful?