DateTimeFormatInfo DateTimeFormatInfo DateTimeFormatInfo DateTimeFormatInfo Class

Определение

Предоставляет сведения о форматировании значений даты и времени, связанные с языком и региональными параметрами.Provides culture-specific information about the format of date and time values.

public ref class DateTimeFormatInfo sealed : ICloneable, IFormatProvider
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements ICloneable, IFormatProvider
Наследование
DateTimeFormatInfoDateTimeFormatInfoDateTimeFormatInfoDateTimeFormatInfo
Атрибуты
Реализации

Примеры

Следующий пример использует отражение для получения свойств DateTimeFormatInfo объект для английского языка (США).The following example uses reflection to get the properties of the DateTimeFormatInfo object for the English (United States) culture. Он отображает значения этих свойств, содержащих строки настраиваемого формата и использует эти строки для отображения в формате даты.It displays the value of those properties that contain custom format strings and uses those strings to display formatted dates.

using System;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get the properties of an en-US DateTimeFormatInfo object.
      DateTimeFormatInfo dtfi = CultureInfo.GetCultureInfo("en-US").DateTimeFormat;
      Type typ = dtfi.GetType();
      PropertyInfo[] props = typ.GetProperties();
      DateTime value = new DateTime(2012, 5, 28, 11, 35, 0); 
      
      foreach (var prop in props) {
         // Is this a format pattern-related property?
         if (prop.Name.Contains("Pattern")) {
            string fmt = prop.GetValue(dtfi, null).ToString();
            Console.WriteLine("{0,-33} {1} \n{2,-37}Example: {3}\n", 
                              prop.Name + ":", fmt, "",
                              value.ToString(fmt)); 
         }
      }
   }
}
// The example displays the following output:
//    FullDateTimePattern:              dddd, MMMM dd, yyyy h:mm:ss tt
//                                         Example: Monday, May 28, 2012 11:35:00 AM
//    
//    LongDatePattern:                  dddd, MMMM dd, yyyy
//                                         Example: Monday, May 28, 2012
//    
//    LongTimePattern:                  h:mm:ss tt
//                                         Example: 11:35:00 AM
//    
//    MonthDayPattern:                  MMMM dd
//                                         Example: May 28
//    
//    RFC1123Pattern:                   ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
//                                         Example: Mon, 28 May 2012 11:35:00 GMT
//    
//    ShortDatePattern:                 M/d/yyyy
//                                         Example: 5/28/2012
//    
//    ShortTimePattern:                 h:mm tt
//                                         Example: 11:35 AM
//    
//    SortableDateTimePattern:          yyyy'-'MM'-'dd'T'HH':'mm':'ss
//                                         Example: 2012-05-28T11:35:00
//    
//    UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z'
//                                         Example: 2012-05-28 11:35:00Z
//    
//    YearMonthPattern:                 MMMM, yyyy
//                                         Example: May, 2012
Imports System.Globalization
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Get the properties of an en-US DateTimeFormatInfo object.
      Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo("en-US").DateTimeFormat
      Dim typ As Type = dtfi.GetType()
      Dim props() As PropertyInfo = typ.GetProperties()
      Dim value As Date = #05/28/2012 11:35AM# 
      
      For Each prop In props
         ' Is this a format pattern-related property?
         If prop.Name.Contains("Pattern") Then
            Dim fmt As String = CStr(prop.GetValue(dtfi, Nothing))
            Console.WriteLine("{0,-33} {1} {2}{3,-37}Example: {4}", 
                              prop.Name + ":", fmt, vbCrLf, "",
                              value.ToString(fmt)) 
            Console.WriteLine()
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'    FullDateTimePattern:              dddd, MMMM dd, yyyy h:mm:ss tt
'                                         Example: Monday, May 28, 2012 11:35:00 AM
'    
'    LongDatePattern:                  dddd, MMMM dd, yyyy
'                                         Example: Monday, May 28, 2012
'    
'    LongTimePattern:                  h:mm:ss tt
'                                         Example: 11:35:00 AM
'    
'    MonthDayPattern:                  MMMM dd
'                                         Example: May 28
'    
'    RFC1123Pattern:                   ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
'                                         Example: Mon, 28 May 2012 11:35:00 GMT
'    
'    ShortDatePattern:                 M/d/yyyy
'                                         Example: 5/28/2012
'    
'    ShortTimePattern:                 h:mm tt
'                                         Example: 11:35 AM
'    
'    SortableDateTimePattern:          yyyy'-'MM'-'dd'T'HH':'mm':'ss
'                                         Example: 2012-05-28T11:35:00
'    
'    UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z'
'                                         Example: 2012-05-28 11:35:00Z
'    
'    YearMonthPattern:                 MMMM, yyyy
'                                         Example: May, 2012

Комментарии

Свойства DateTimeFormatInfo класса содержат сведения об особенностях язык и региональные параметры для форматирования или разбора значений даты и времени, например следующие:The properties of the DateTimeFormatInfo class contain culture-specific information for formatting or parsing date and time values such as the following:

  • Шаблоны, используемые для форматирования значения даты.The patterns used to format date values.

  • Шаблоны, используемые для форматирования значения времени.The patterns used to format time values.

  • Названия дней недели.The names of the days of the week.

  • Названия месяцев года.The names of the months of the year.

  • ПолудняThe A.M. и после полудняand P.M. обозначения, используемые в значения времени.designators used in time values.

  • Календарь, в котором выражаются дат.The calendar in which dates are expressed.

СодержаниеIn this section:

Создание экземпляра объекта DateTimeFormatInfoInstantiating a DateTimeFormatInfo object

Объект DateTimeFormatInfo объект может представлять соглашения о форматировании инвариантных региональных параметров, заданных региональных параметров, нейтрального языка и региональных параметров или текущего языка и региональных параметров.A DateTimeFormatInfo object can represent the formatting conventions of the invariant culture, a specific culture, a neutral culture, or the current culture. В этом разделе описываются способы создания экземпляра каждого типа DateTimeFormatInfo объекта.This section discusses how to instantiate each type of DateTimeFormatInfo object.

Создание экземпляра объекта DateTimeFormatInfo для инвариантного языка и региональных параметровInstantiating a DateTimeFormatInfo object for the invariant culture

Инвариантный язык и региональные параметры представляет язык и региональные параметры без учета языка и региональных параметров.The invariant culture represents a culture that is culture-insensitive. Он основан на английском языке, но не на любой определенной англоговорящего страны или региона.It is based on the English language, but not on any specific English-speaking country/region. Несмотря на то, что данные конкретных языков и региональных параметров может быть динамическим и можно изменить в соответствии с новой национальные стандарты или пользовательские настройки, не приводит к изменению данных инвариантного языка и региональных параметров.Although the data of specific cultures can be dynamic and can change to reflect new cultural conventions or user preferences, the data of the invariant culture does not change. Можно создать экземпляр DateTimeFormatInfo , представляющий соглашения о форматировании инвариантного языка и региональных параметров одним из следующих способов:You can instantiate a DateTimeFormatInfo object that represents the formatting conventions of the invariant culture in the following ways:

В следующем примере используется каждый из этих методов для создания экземпляра DateTimeFormatInfo , представляющий инвариантного языка и региональных параметров.The following example uses each of these methods to instantiate a DateTimeFormatInfo object that represents the invariant culture. Затем он сообщает, является ли объект только для чтения.It then indicates whether the object is read-only.

System.Globalization.DateTimeFormatInfo dtfi; 

dtfi = System.Globalization.DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dtfi.IsReadOnly);               

dtfi = new System.Globalization.DateTimeFormatInfo();
Console.WriteLine(dtfi.IsReadOnly);               

dtfi = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat;
Console.WriteLine(dtfi.IsReadOnly);                
// The example displays the following output:
//       True
//       False
//       True      
Dim dtfi As System.Globalization.DateTimeFormatInfo

dtfi = System.Globalization.DateTimeFormatInfo.InvariantInfo
Console.WriteLine(dtfi.IsReadOnly)               

dtfi = New System.Globalization.DateTimeFormatInfo()
Console.WriteLine(dtfi.IsReadOnly)               

dtfi = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat
Console.WriteLine(dtfi.IsReadOnly) 
' The example displays the following output:
'       True
'       False
'       True      

Создание экземпляра объекта DateTimeFormatInfo для конкретной культурыInstantiating a DateTimeFormatInfo object for a specific culture

Конкретной культуры представляет язык, используемый в определенной страны или региона.A specific culture represents a language that is spoken in a particular country/region. Например определенного языка и региональных параметров, представляющий английский язык, используемый в США является en US и en-CA является определенного языка и региональных параметров, представляющий английский язык, используемый в Канаде.For example, en-US is a specific culture that represents the English language spoken in the United States, and en-CA is a specific culture that represents the English language spoken in Canada. Можно создать экземпляр DateTimeFormatInfo , представляющий соглашения о форматировании для определенного языка и региональных параметров одним из следующих способов:You can instantiate a DateTimeFormatInfo object that represents the formatting conventions of a specific culture in the following ways:

В следующем примере демонстрируется каждый из этих способов создания экземпляров DateTimeFormatInfo и указывает, является ли результирующий объект только для чтения.The following example illustrates each of these ways to instantiate a DateTimeFormatInfo object and indicates whether the resulting object is read-only.

System.Globalization.CultureInfo ci = null;
System.Globalization.DateTimeFormatInfo dtfi = null;

// Instantiate a culture using CreateSpecificCulture.
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from CreateSpecificCulture: {1}", ci.Name, dtfi.IsReadOnly);

// Instantiate a culture using the CultureInfo constructor.
ci = new System.Globalization.CultureInfo("en-CA"); 
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from CultureInfo constructor: {1}", ci.Name, dtfi.IsReadOnly);

// Retrieve a culture by calling the GetCultureInfo method.
ci = System.Globalization.CultureInfo.GetCultureInfo("en-AU");
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from GetCultureInfo: {1}", ci.Name, dtfi.IsReadOnly);

// Instantiate a DateTimeFormatInfo object by calling DateTimeFormatInfo.GetInstance.  
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(ci);
Console.WriteLine("{0} from GetInstance: {1}", ci.Name, dtfi.IsReadOnly);

// The example displays the following output:
//      en-US from CreateSpecificCulture: False
//      en-CA from CultureInfo constructor: False
//      en-AU from GetCultureInfo: True
//      en-GB from GetInstance: False
Dim ci As System.Globalization.CultureInfo = Nothing
Dim dtfi As System.Globalization.DateTimeFormatInfo = Nothing

' Instantiate a culture using CreateSpecificCulture.
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from CreateSpecificCulture: {1}", ci.Name, dtfi.IsReadOnly)

' Instantiate a culture using the CultureInfo constructor.
ci = new System.Globalization.CultureInfo("en-CA") 
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from CultureInfo constructor: {1}", ci.Name, dtfi.IsReadOnly)

' Retrieve a culture by calling the GetCultureInfo method.
ci = System.Globalization.CultureInfo.GetCultureInfo("en-AU")
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from GetCultureInfo: {1}", ci.Name, dtfi.IsReadOnly)


' Instantiate a DateTimeFormatInfo object by calling DateTimeFormatInfo.GetInstance.  
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(ci)
Console.WriteLine("{0} from GetInstance: {1}", ci.Name, dtfi.IsReadOnly)

' The example displays the following output:
'      en-US from CreateSpecificCulture: False
'      en-CA from CultureInfo constructor: False
'      en-AU from GetCultureInfo: True
'      en-GB from GetInstance: False

Создание экземпляра объекта DateTimeFormatInfo для нейтрального языка и региональных параметровInstantiating a DateTimeFormatInfo object for a neutral culture

Представляет нейтральный язык и региональные параметры языка и региональных параметров или языка, который не зависит от страны или региона; Обычно он является родительским для одного или нескольких конкретных культур.A neutral culture represents a culture or language that is independent of a country/region; it is typically the parent of one or more specific cultures. Например Fr — это нейтральная культура для французского языка и родительского языка и региональных параметров fr-FR.For example, Fr is a neutral culture for the French language and the parent of the fr-FR culture. Можно создать экземпляр DateTimeFormatInfo , представляющий соглашения о форматировании нейтрального языка и региональных параметров теми же способами, созданный DateTimeFormatInfo , представляющий соглашения о форматировании для определенного языка и региональных параметров.You can instantiate a DateTimeFormatInfo object that represents the formatting conventions of a neutral culture in the same ways that you create a DateTimeFormatInfo object that represents the formatting conventions of a specific culture. Кроме того, вы можете получить нейтральная культура DateTimeFormatInfo путем извлечения нейтрального языка и региональных параметров из конкретной культуры CultureInfo.Parent свойство и получение DateTimeFormatInfo объект, возвращенный его CultureInfo.DateTimeFormat свойство.In addition, you can retrieve a neutral culture's DateTimeFormatInfo object by retrieving a neutral culture from a specific culture's CultureInfo.Parent property and retrieving the DateTimeFormatInfo object returned by its CultureInfo.DateTimeFormat property. Если родительский язык и региональные параметры представляет инвариантных региональных параметров, возвращенного DateTimeFormatInfo объект доступен для чтения/записи.Unless the parent culture represents the invariant culture, the returned DateTimeFormatInfo object is read/write. Следующий пример иллюстрирует эти способа создания экземпляров DateTimeFormatInfo объект, который представляет нейтральный язык и региональные параметры.The following example illustrates these ways of instantiating a DateTimeFormatInfo object that represents a neutral culture.

System.Globalization.CultureInfo specific, neutral;
System.Globalization.DateTimeFormatInfo dtfi;

// Instantiate a culture by creating a specific culture and using its Parent property.
specific = System.Globalization.CultureInfo.GetCultureInfo("fr-FR");
neutral = specific.Parent;
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly);

dtfi = System.Globalization.CultureInfo.GetCultureInfo("fr-FR").Parent.DateTimeFormat;
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a neutral culture using the CultureInfo constructor.
neutral = new System.Globalization.CultureInfo("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from CultureInfo constructor: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a culture using CreateSpecificCulture. 
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from CreateSpecificCulture: {1}", neutral.Name, dtfi.IsReadOnly);

// Retrieve a culture by calling the GetCultureInfo method.
neutral = System.Globalization.CultureInfo.GetCultureInfo("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from GetCultureInfo: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a DateTimeFormatInfo object by calling GetInstance.  
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr");
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(neutral);
Console.WriteLine("{0} from GetInstance: {1}", neutral.Name, dtfi.IsReadOnly);

// The example displays the following output:
//       fr from Parent property: False
//       fr from Parent property: False
//       fr from CultureInfo constructor: False
//       fr-FR from CreateSpecificCulture: False
//       fr from GetCultureInfo: True
//       fr-FR from GetInstance: False      
Dim specific, neutral As System.Globalization.CultureInfo
Dim dtfi As System.Globalization.DateTimeFormatInfo

' Instantiate a culture by creating a specific culture and using its Parent property.
specific = System.Globalization.CultureInfo.GetCultureInfo("fr-FR")
neutral = specific.Parent
dtfi = neutral.DateTimeFormat
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly)

dtfi = System.Globalization.CultureInfo.GetCultureInfo("fr-FR").Parent.DateTimeFormat
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly)

' Instantiate a neutral culture using the CultureInfo constructor.
neutral = New System.Globalization.CultureInfo("fr")
dtfi = neutral.DateTimeFormat
Console.WriteLine("{0} from CultureInfo constructor: {1}", neutral.Name, dtfi.IsReadOnly)

' Instantiate a culture using CreateSpecificCulture. 
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr")
dtfi = neutral.DateTimeFormat
Console.WriteLine("{0} from CreateSpecificCulture: {1}", neutral.Name, dtfi.IsReadOnly)

' Retrieve a culture by calling the GetCultureInfo method.
neutral = System.Globalization.CultureInfo.GetCultureInfo("fr")
dtfi = neutral.DateTimeFormat
Console.WriteLine("{0} from GetCultureInfo: {1}", neutral.Name, dtfi.IsReadOnly)

' Instantiate a DateTimeFormatInfo object by calling GetInstance.  
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr")
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(neutral)
Console.WriteLine("{0} from GetInstance: {1}", neutral.Name, dtfi.IsReadOnly)

' The example displays the following output:
'       fr from Parent property: False
'       fr from Parent property: False
'       fr from CultureInfo constructor: False
'       fr-FR from CreateSpecificCulture: False
'       fr from GetCultureInfo: True
'       fr-FR from GetInstance: False       

Примечание

В .NET Framework версии 1.0 через .NET Framework 3,5.NET Framework 3.5, при попытке получить DateTimeFormatInfo , который отражает соглашения о форматировании нейтрального языка и региональных параметров создает NotSupportedException исключение.In the .NET Framework versions 1.0 through .NET Framework 3,5.NET Framework 3.5, trying to retrieve a DateTimeFormatInfo object that reflects the formatting conventions of a neutral culture throws a NotSupportedException exception.

Тем не менее нейтрального языка и региональных параметров не имеет сведений об особенностях язык и региональные параметры форматирования, так как он не зависит от конкретную страну или регион.However, a neutral culture lacks culture-specific formatting information, because it is independent of a specific country/region. Вместо заполнения DateTimeFormatInfo объект универсального значениями, платформа .NET Framework возвращает DateTimeFormatInfo , который отражает, правила форматирования конкретного языка и региональных параметров, является дочерним для нейтрального языка и региональных параметров.Instead of populating the DateTimeFormatInfo object with generic values, the .NET Framework returns a DateTimeFormatInfo object that reflects the formatting conventions of a specific culture that is a child of the neutral culture. Например DateTimeFormatInfo объекта для языка и региональных параметров en нейтральный отражает соглашения о форматировании языка и региональных параметров en US и DateTimeFormatInfo объекта для языка и региональных параметров fr отражает соглашения о форматировании языка и региональных параметров fr-FR.For example, the DateTimeFormatInfo object for the neutral en culture reflects the formatting conventions of the en-US culture, and the DateTimeFormatInfo object for the fr culture reflects the formatting conventions of the fr-FR culture.

Чтобы определить, какие определенного языка и региональных параметров соглашения о форматировании представляет нейтральный язык и региональные параметры, можно использовать код, аналогичный следующему.You can use code like the following to determine which specific culture's formatting conventions a neutral culture represents. В примере отражение используется для сравнения DateTimeFormatInfo свойства со свойствами данного объекта с определенным дочерним культурой нейтрального языка и региональных параметров.The example uses reflection to compare the DateTimeFormatInfo properties of a neutral culture with the properties of a specific child culture. Он рассматривает двух календарей как эквивалентные, если они относятся к одному типу календаря и, по григорианскому календарю календари, если их GregorianCalendar.CalendarType свойства имеют одинаковые значения.It considers two calendars to be equivalent if they are the same calendar type and, for Gregorian calendars, if their GregorianCalendar.CalendarType properties have identical values.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get all the neutral cultures
      List<String> names = new List<String>();
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    culture => names.Add(culture.Name));
      names.Sort();
      foreach (var name in names) {
         // Ignore the invariant culture.
         if (name == "") continue;
         
         ListSimilarChildCultures(name);        
      }
   }

   private static void ListSimilarChildCultures(String name)
   {
      // Create the neutral DateTimeFormatInfo object.
      DateTimeFormatInfo dtfi = CultureInfo.GetCultureInfo(name).DateTimeFormat;
      // Retrieve all specific cultures of the neutral culture.
      CultureInfo[] cultures = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               culture => culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase));
      // Create an array of DateTimeFormatInfo properties
      PropertyInfo[] properties = typeof(DateTimeFormatInfo).GetProperties(BindingFlags.Instance | BindingFlags.Public);
      bool hasOneMatch = false;

      foreach (var ci in cultures) {
         bool match = true;     
         // Get the DateTimeFormatInfo for a specific culture.
         DateTimeFormatInfo specificDtfi = ci.DateTimeFormat;
         // Compare the property values of the two.
         foreach (var prop in properties) {
            // We're not interested in the value of IsReadOnly.     
            if (prop.Name == "IsReadOnly") continue;
            
            // For arrays, iterate the individual elements to see if they are the same.
            if (prop.PropertyType.IsArray) { 
               IList nList = (IList) prop.GetValue(dtfi, null);
               IList sList = (IList) prop.GetValue(specificDtfi, null);
               if (nList.Count != sList.Count) {
                  match = false;
Console.WriteLine("   Different n in {2} array for {0} and {1}", name, ci.Name, prop.Name);
                  break;
               } 

               for (int ctr = 0; ctr < nList.Count; ctr++) {
                  if (! nList[ctr].Equals(sList[ctr])) { 
                     match = false;
Console.WriteLine("   {0} value different for {1} and {2}", prop.Name, name, ci.Name);                     
                     break;
                  }     
               }
               
               if (! match) break;
            }
            // Get non-array values.
            else {
               Object specificValue = prop.GetValue(specificDtfi);
               Object neutralValue = prop.GetValue(dtfi);
                               
               // Handle comparison of Calendar objects.
               if (prop.Name == "Calendar") { 
                  // The cultures have a different calendar type.
                  if (specificValue.ToString() != neutralValue.ToString()) {
Console.WriteLine("   Different calendar types for {0} and {1}", name, ci.Name);
                     match = false;
                     break;
                  }
                   
                  if (specificValue is GregorianCalendar) {
                     if (((GregorianCalendar) specificValue).CalendarType != ((GregorianCalendar) neutralValue).CalendarType) {
Console.WriteLine("   Different Gregorian calendar types for {0} and {1}", name, ci.Name);
                        match = false;
                        break;
                     }
                  }
               }
               else if (! specificValue.Equals(neutralValue)) {
                  match = false;
Console.WriteLine("   Different {0} values for {1} and {2}", prop.Name, name, ci.Name);                  
                  break;   
               }
            }        
         }
         if (match) {
            Console.WriteLine("DateTimeFormatInfo object for '{0}' matches '{1}'", 
                              name, ci.Name);
            hasOneMatch = true;
         }                                       
      }
      if (! hasOneMatch)
         Console.WriteLine("DateTimeFormatInfo object for '{0}' --> No Match", name);            

      Console.WriteLine();
   }
}
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Get all the neutral cultures
      Dim names As New List(Of String)
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    Sub(culture) names.Add(culture.Name))
      names.Sort()
      For Each name In names
         ' Ignore the invariant culture.
         If name = "" Then Continue For
         
         ListSimilarChildCultures(name)        
      Next
   End Sub

   Private Sub ListSimilarChildCultures(name As String)
      ' Create the neutral DateTimeFormatInfo object.
      Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo(name).DateTimeFormat
      ' Retrieve all specific cultures of the neutral culture.
      Dim cultures() As CultureInfo = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               Function(culture) culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase))
      ' Create an array of DateTimeFormatInfo properties
      Dim properties() As PropertyInfo = GetType(DateTimeFormatInfo).GetProperties(BindingFlags.Instance Or BindingFlags.Public)
      Dim hasOneMatch As Boolean = False

      For Each ci In cultures
         Dim match As Boolean = True     
         ' Get the DateTimeFormatInfo for a specific culture.
         Dim specificDtfi As DateTimeFormatInfo = ci.DateTimeFormat
         ' Compare the property values of the two.
         For Each prop In properties
            ' We're not interested in the value of IsReadOnly.     
            If prop.Name = "IsReadOnly" Then Continue For
            
            ' For arrays, iterate the individual elements to see if they are the same.
            If prop.PropertyType.IsArray Then 
               Dim nList As IList = CType(prop.GetValue(dtfi, Nothing), IList)
               Dim sList As IList = CType(prop.GetValue(specificDtfi, Nothing), IList)
               If nList.Count <> sList.Count Then
                  match = false
Console.WriteLine("   Different n in {2} array for {0} and {1}", name, ci.Name, prop.Name)
                  Exit For
               End If 

               For ctr As Integer = 0 To nList.Count - 1
                  If Not nList(ctr).Equals(sList(ctr)) 
                     match = false
Console.WriteLine("   {0} value different for {1} and {2}", prop.Name, name, ci.Name)                     
                     Exit For
                  End If     
               Next
               
               If Not match Then Exit For
            ' Get non-array values.
            Else
               Dim specificValue As Object = prop.GetValue(specificDtfi)
               Dim neutralValue As Object = prop.GetValue(dtfi)
                               
               ' Handle comparison of Calendar objects.
               If prop.Name = "Calendar" Then 
                  ' The cultures have a different calendar type.
                  If specificValue.ToString() <> neutralValue.ToString() Then
Console.WriteLine("   Different calendar types for {0} and {1}", name, ci.Name)
                     match = False
                     Exit For
                  End If
                   
                  If TypeOf specificValue Is GregorianCalendar Then
                     If CType(specificValue, GregorianCalendar).CalendarType <> CType(neutralValue, GregorianCalendar).CalendarType Then
Console.WriteLine("   Different Gregorian calendar types for {0} and {1}", name, ci.Name)
                        match = False
                        Exit For
                     End If
                  End If
               Else If Not specificValue.Equals(neutralValue) Then
                  match = false
Console.WriteLine("   Different {0} values for {1} and {2}", prop.Name, name, ci.Name)                  
                  Exit For   
               End If
            End If        
         Next
         If match Then
            Console.WriteLine("DateTimeFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name)
            hasOneMatch = True
         End If                                       
      Next
      If Not hasOneMatch Then
         Console.WriteLine("DateTimeFormatInfo object for '{0}' --> No Match", name)            
      End If
      
      Console.WriteLine()
   End Sub
End Module

Создание экземпляра объекта DateTimeFormatInfo для текущего языка и региональных параметровInstantiating a DateTimeFormatInfo object for the current culture

Можно создать экземпляр DateTimeFormatInfo , представляющий соглашения о форматировании текущего языка и региональных параметров одним из следующих способов:You can instantiate a DateTimeFormatInfo object that represents the formatting conventions of the current culture in the following ways:

В следующем примере используется каждый из этих методов для создания экземпляра DateTimeFormatInfo , представляющий соглашения о форматировании текущего языка и региональных параметров.The following example uses each of these methods to instantiate a DateTimeFormatInfo object that represents the formatting conventions of the current culture. Затем он сообщает, является ли объект только для чтения.It then indicates whether the object is read-only.

DateTimeFormatInfo dtfi;

dtfi = DateTimeFormatInfo.CurrentInfo;
Console.WriteLine(dtfi.IsReadOnly);

dtfi = CultureInfo.CurrentCulture.DateTimeFormat;
Console.WriteLine(dtfi.IsReadOnly);

dtfi = DateTimeFormatInfo.GetInstance(CultureInfo.CurrentCulture);
Console.WriteLine(dtfi.IsReadOnly);
// The example displays the following output:
//     True
//     True
//     True
Dim dtfi As DateTimeFormatInfo

dtfi = DateTimeFormatInfo.CurrentInfo
Console.WriteLine(dtfi.IsReadOnly)

dtfi = CultureInfo.CurrentCulture.DateTimeFormat
Console.WriteLine(dtfi.IsReadOnly)

dtfi = DateTimeFormatInfo.GetInstance(CultureInfo.CurrentCulture)
Console.WriteLine(dtfi.IsReadOnly)
' The example displays the following output:
'     True
'     True
'     True

Можно создать доступный для записи DateTimeFormatInfo , представляющий соглашения текущих региональных параметров потока в одном из следующих способов:You can create a writable DateTimeFormatInfo object that represents the conventions of the current thread culture in one of these ways:

В следующем примере демонстрируется каждый способ создания экземпляра для чтения и записи DateTimeFormatInfo и отображает значение его IsReadOnly свойство.The following example illustrates each way of instantiating a read/write DateTimeFormatInfo object and displays the value of its IsReadOnly property.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTimeFormatInfo current1 = DateTimeFormatInfo.CurrentInfo;
      current1 = (DateTimeFormatInfo) current1.Clone();
      Console.WriteLine(current1.IsReadOnly);

      CultureInfo culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
      DateTimeFormatInfo current2 = culture2.DateTimeFormat;
      Console.WriteLine(current2.IsReadOnly);
   }
}
// The example displays the following output:
//       False
//       False
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current1 As DateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo
      current1 = CType(current1.Clone(), DateTimeFormatInfo)
      Console.WriteLine(current1.IsReadOnly)

      Dim culture2 As CultureInfo = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name)
      Dim current2 As DateTimeFormatInfo = culture2.DateTimeFormat
      Console.WriteLine(current2.IsReadOnly)
   End Sub
End Module
' The example displays the following output:
'       False
'       False

В Windows, пользователь может переопределить некоторые из DateTimeFormatInfo значений свойств, используемых в форматирование и разбор операции с помощью регион и язык приложения панели управления.In Windows, the user can override some of the DateTimeFormatInfo property values used in formatting and parsing operations through the Region and Language application in Control Panel. К примеру, языком и региональными параметрами является английский (США) пользователь может выбрать отображение долго значения времени в 24-часовом формате (в формате чч: мм:) вместо в 12-часовом формате по умолчанию (в формате ч: мин: tt).For example, a user whose culture is English (United States) might choose to display long time values using a 24-hour clock (in the format HH:mm:ss) instead of the default 12-hour clock (in the format h:mm:ss tt). DateTimeFormatInfo Объектами, возвращаемыми в способы, с помощью описанных ранее отражают эти переопределения пользователем.The DateTimeFormatInfo objects retrieved in the ways discussed previously all reflect these user overrides. Если это нежелательно, можно создать NumberFormatInfo объект, который не отражает пользователя переопределяет (и также является чтение и запись, а не только для чтения), вызвав CultureInfo.CultureInfo(String, Boolean) конструктор и при задании значения false для useUserOverride аргумент.If this is undesirable, you can create a NumberFormatInfo object that does not reflect user overrides (and is also read/write instead of read-only) by calling the CultureInfo.CultureInfo(String, Boolean) constructor and supplying a value of false for the useUserOverride argument. В следующем примере это для системы, текущий язык — Русский (Россия) и было изменено, долго шаблоном по умолчанию tt ч: мин: на чч: мм:.The following example illustrates this for a system whose current culture is English (United States) and whose long time pattern has been changed from the default of h:mm:ss tt to HH:mm:ss.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      DateTimeFormatInfo dtfi;
      
      culture = CultureInfo.CurrentCulture;
      dtfi = culture.DateTimeFormat;
      Console.WriteLine("Culture Name:      {0}", culture.Name);
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride);
      Console.WriteLine("Long Time Pattern: {0}\n", culture.DateTimeFormat.LongTimePattern);
            
      culture = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
      Console.WriteLine("Culture Name:      {0}",   culture.Name);
      Console.WriteLine("User Overrides:    {0}",   culture.UseUserOverride);
      Console.WriteLine("Long Time Pattern: {0}\n", culture.DateTimeFormat.LongTimePattern);
   }
}
// The example displays the following output:
//       Culture Name:      en-US
//       User Overrides:    True
//       Long Time Pattern: HH:mm:ss
//       
//       Culture Name:      en-US
//       User Overrides:    False
//       Long Time Pattern: h:mm:ss tt
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo
      Dim dtfi As DateTimeFormatInfo
      
      culture = CultureInfo.CurrentCulture
      dtfi = culture.DateTimeFormat
      Console.WriteLine("Culture Name:      {0}", culture.Name)
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride)
      Console.WriteLine("Long Time Pattern: {0}", culture.DateTimeFormat.LongTimePattern)
      Console.WriteLine()
            
      culture = New CultureInfo(CultureInfo.CurrentCulture.Name, False)
      Console.WriteLine("Culture Name:      {0}", culture.Name)
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride)
      Console.WriteLine("Long Time Pattern: {0}", culture.DateTimeFormat.LongTimePattern)
   End Sub
End Module
' The example displays the following output:
'       Culture Name:      en-US
'       User Overrides:    True
'       Long Time Pattern: HH:mm:ss
'       
'       Culture Name:      en-US
'       User Overrides:    False
'       Long Time Pattern: h:mm:ss tt

DateTimeFormatInfo и динамических данныхDateTimeFormatInfo and dynamic data

Данные язык и региональные параметры для форматирования значений даты и времени, представленных DateTimeFormatInfo класс является динамическим, так же, как региональные данные, предоставляемые CultureInfo класса.The culture-specific data for formatting date and time values provided by the DateTimeFormatInfo class is dynamic, just like cultural data provided by the CultureInfo class. Не следует вносить никаких предположений о стабильности значений для DateTimeFormatInfo объектов, которые связаны с конкретным CultureInfo объектов.You should not make any assumptions about the stability of values for DateTimeFormatInfo objects that are associated with particular CultureInfo objects. Только данные, предоставляемые инвариантного языка и региональных параметров и связанный с ним DateTimeFormatInfo стабильна, объект.Only the data provided by the invariant culture and its associated DateTimeFormatInfo object is stable. Другие данные можно изменить между сеансами приложения или даже в том случае, если приложение запущено.Other data can change between application sessions or even while your application is running. Существует четыре основных источника изменений.There are four major sources of change:

  • Обновления системы.System updates. Со временем меняться культурные предпочтения, такие как предпочтительный календарь или традиционные форматы даты и времени.Cultural preferences such as the preferred calendar or customary date and time formats change over time. В этом случае обновление Windows включает в себя изменения DateTimeFormatInfo значение свойства для конкретного языка и региональных параметров.When this happens, Windows Update includes changes to the DateTimeFormatInfo property value for a particular culture.

  • Замена языков и региональных параметров.Replacement cultures. CultureAndRegionInfoBuilder Класс может использоваться для замены данных существующего языка и региональных параметров.The CultureAndRegionInfoBuilder class can be used to replace the data of an existing culture.

  • Каскадные изменения значений свойств.Cascading changes to property values. Можно изменить несколько свойств, связанных с языком и региональными параметрами, во время выполнения, который, в свою очередь, приводит к DateTimeFormatInfo об изменениях.A number of culture-related properties can change at run time, which, in turn, causes DateTimeFormatInfo data to change. Например текущий язык и региональные параметры можно изменить программно или через действия пользователя.For example, the current culture can be changed either programmatically or through user action. В этом случае DateTimeFormatInfo объект, возвращаемый CurrentInfo изменения свойств объекта, связанного с текущей культурой.When this happens, the DateTimeFormatInfo object returned by the CurrentInfo property changes to an object associated with the current culture. Аналогичным образом, можно изменить календарь культуры, который можно привести к изменениям многочисленных DateTimeFormatInfo значения свойств.Similarly, a culture's calendar can change, which can result in changes to numerous DateTimeFormatInfo property values.

  • Персональные настройки пользователя.User preferences. Пользователи приложения можно переопределить некоторые значения, связанные с текущего языка и региональных параметров системы через региональные и языковые параметры на панели управления.Users of your application might choose to override some of the values associated with the current system culture through the regional and language options in Control Panel. Например пользователи могут использовать для отображения даты в другом формате.For example, users might choose to display the date in a different format. Если CultureInfo.UseUserOverride свойству true, свойства DateTimeFormatInfo объекта зависят от параметров пользователя.If the CultureInfo.UseUserOverride property is set to true, the properties of the DateTimeFormatInfo object is also retrieved from the user settings. Если параметры пользователя, несовместимы с языка и региональных параметров, связанных с CultureInfo объекта (например, в том случае, если выбранный календарь не является одним из календарей, обозначается OptionalCalendars свойство), результаты методов и значения свойств не определены.If the user settings are incompatible with the culture associated with the CultureInfo object (for example, if the selected calendar is not one of the calendars indicated by the OptionalCalendars property), the results of the methods and the values of the properties are undefined.

Чтобы свести к минимуму вероятность несогласованности данных, все свойства могут быть переопределены пользователем DateTimeFormatInfo объект инициализируются при создании объекта.To minimize the possibility of inconsistent data, all user-overridable properties of a DateTimeFormatInfo object are initialized when the object is created. По-прежнему вероятность несогласованности, так как ни создание объекта, ни процесс переопределения пользователем будут элементарными и их соответствующие значения можно изменить при создании объекта.There is still a possibility of inconsistency, because neither object creation nor the user override process is atomic and the relevant values can change during object creation. Тем не менее это должен быть крайне редко.However, this situation should be extremely rare.

Вы можете управлять ли переопределений пользователя, отражаются в DateTimeFormatInfo объекты, представляющие языка и региональных параметров, как язык и региональные параметры.You can control whether user overrides are reflected in DateTimeFormatInfo objects that represent the same culture as the system culture. В следующей таблице перечислены ситуации, в которых DateTimeFormatInfo объекта можно получить и показывает, отражает ли полученный объект переопределений пользователя.The following table lists the ways in which a DateTimeFormatInfo object can be retrieved and indicates whether the resulting object reflects user overrides.

Источник объекта CultureInfo и DateTimeFormatInfoSource of CultureInfo and DateTimeFormatInfo object Отражает переопределений пользователяReflects user overrides
СвойствоCultureInfo.CurrentCulture.DateTimeFormat CultureInfo.CurrentCulture.DateTimeFormat property ДаYes
СвойствоDateTimeFormatInfo.CurrentInfo DateTimeFormatInfo.CurrentInfo property ДаYes
Метод CultureInfo.CreateSpecificCultureCultureInfo.CreateSpecificCulture method ДаYes
Метод CultureInfo.GetCultureInfoCultureInfo.GetCultureInfo method НетNo
Конструктор CultureInfo.CultureInfo(String)CultureInfo.CultureInfo(String) constructor ДаYes
Конструктор CultureInfo.CultureInfo(String, Boolean)CultureInfo.CultureInfo(String, Boolean) constructor Зависит от значения useUserOverride параметрDepends on value of useUserOverride parameter

Если нет весомого повода делать иначе, должен подчиняться переопределений пользователя при использовании DateTimeFormatInfo объекта в клиентских приложениях для форматирования и анализа пользовательского ввода или для отображения данных.Unless there is a compelling reason to do otherwise, you should respect user overrides when you use the DateTimeFormatInfo object in client applications to format and parse user input or to display data. Для сервера приложений и автоматической установки приложений следует не.For server applications or unattended applications, you should not. Тем не менее если вы используете DateTimeFormatInfo объект либо явно или неявно для сохранения данных даты и времени в виде строки, следует использовать либо DateTimeFormatInfo следует указать объект, который отражает соглашения о форматировании инвариантных региональных параметров, или даты и времени пользовательского формата, используемого независимо от языка и региональных параметров.However, if you are using the DateTimeFormatInfo object either explicitly or implicitly to persist date and time data in string form, you should either use a DateTimeFormatInfo object that reflects the formatting conventions of the invariant culture, or you should specify a custom date and time format string that you use regardless of culture.

Форматирование значения даты и времениFormatting dates and times

Объект DateTimeFormatInfo используются явно или неявно в все даты и времени, в операциях форматирования.A DateTimeFormatInfo object is used implicitly or explicitly in all date and time formatting operations. К ним относятся вызовы следующих методов:These include calls to the following methods:

Все даты и времени, операций форматирования сделать использование IFormatProvider реализации.All date and time formatting operations make use of an IFormatProvider implementation. IFormatProvider Интерфейс включает один метод IFormatProvider.GetFormat(Type).The IFormatProvider interface includes a single method, IFormatProvider.GetFormat(Type). Этот метод обратного вызова передается Type , представляющий тип, необходимый для предоставления сведений о форматировании.This callback method is passed a Type object that represents the type needed to provide formatting information. Метод возвращает экземпляр этого типа или null если он не может предоставить экземпляр типа.The method returns either an instance of that type or null if it cannot provide an instance of the type. .NET Framework включает две IFormatProvider реализации для форматирования значения даты и времени:The .NET Framework includes two IFormatProvider implementations for formatting dates and times:

  • CultureInfo Класс, который представляет конкретного языка и региональных параметров (или определенном языке в конкретную страну или регион).The CultureInfo class, which represents a specific culture (or a specific language in a specific country/region). В форматировании даты и времени операции CultureInfo.GetFormat возвращает DateTimeFormatInfo объект, связанный с его CultureInfo.DateTimeFormat свойство.In a date and time formatting operation, the CultureInfo.GetFormat method returns the DateTimeFormatInfo object associated with its CultureInfo.DateTimeFormat property.

  • DateTimeFormatInfo Класс, который предоставляет сведения о соглашения о форматировании языка и региональных параметров, его связанный.The DateTimeFormatInfo class, which provides information about the formatting conventions of its associated culture. DateTimeFormatInfo.GetFormat Метод возвращает экземпляр самой себя.The DateTimeFormatInfo.GetFormat method returns an instance of itself.

Если IFormatProvider реализация не предоставляется явно, в метод форматирования CultureInfo объект, возвращаемый CultureInfo.CurrentCulture используется свойство, представляющее язык и региональные параметры текущего потока.If an IFormatProvider implementation is not provided to a formatting method explicitly, the CultureInfo object returned by the CultureInfo.CurrentCulture property that represents the current thread culture is used.

В следующем примере показано отношение между IFormatProvider интерфейс и DateTimeFormatInfo класс в операциях форматирования.The following example illustrates the relationship between the IFormatProvider interface and the DateTimeFormatInfo class in formatting operations. Он определяет пользовательский IFormatProvider реализации которого GetFormat метод отображает тип объекта, запрошенный операцией форматирования.It defines a custom IFormatProvider implementation whose GetFormat method displays the type of the object requested by the formatting operation. Если он запрашивает DateTimeFormatInfo объекта, этот метод предоставляет DateTimeFormatInfo объект для текущего языка и региональных параметров потока.If it is requesting a DateTimeFormatInfo object, the method provides the DateTimeFormatInfo object for the current thread culture. Как видно в результатах показано в примере Decimal.ToString(IFormatProvider) запросы метода DateTimeFormatInfo объекта, предоставляющего сведения о форматировании, тогда как String.Format(IFormatProvider, String, Object[]) запросы метода NumberFormatInfo и DateTimeFormatInfo объектов, а также ICustomFormatter Реализация.As the output from the example shows, the Decimal.ToString(IFormatProvider) method requests a DateTimeFormatInfo object to provide formatting information, whereas the String.Format(IFormatProvider, String, Object[]) method requests NumberFormatInfo and DateTimeFormatInfo objects as well as an ICustomFormatter implementation.

using System;
using System.Globalization;

public class CurrentCultureFormatProvider : IFormatProvider
{
   public Object GetFormat(Type formatType) 
   {
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name);
      if (formatType == typeof(NumberFormatInfo))
         return NumberFormatInfo.CurrentInfo;
      else if (formatType == typeof(DateTimeFormatInfo))
         return DateTimeFormatInfo.CurrentInfo;
      else
         return null;
   }
}

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 5, 28, 12, 30, 0);
      string value = dateValue.ToString("F", new CurrentCultureFormatProvider());
      Console.WriteLine(value);
      Console.WriteLine();
      string composite = String.Format(new CurrentCultureFormatProvider(), 
                                       "Date: {0:d}   Amount: {1:C}   Description: {2}",
                                       dateValue, 1264.03m, "Service Charge");
      Console.WriteLine(composite);
      Console.WriteLine();
   }
}
// The example displays output like the following:
//       Requesting an object of type DateTimeFormatInfo
//       Tuesday, May 28, 2013 1:30:00 PM
//       
//       Requesting an object of type ICustomFormatter
//       Requesting an object of type DateTimeFormatInfo
//       Requesting an object of type NumberFormatInfo
//       Date: 5/28/2013   Amount: $1,264.03   Description: Service Charge
Imports System.Globalization

Public Class CurrentCultureFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name)
      If formatType Is GetType(NumberFormatInfo) Then
         Return NumberFormatInfo.CurrentInfo
      Else If formatType Is GetType(DateTimeFormatInfo) Then
         Return DateTimeFormatInfo.CurrentInfo
      Else
         Return Nothing
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 05, 28, 13, 30, 0)
      Dim value As String = dateValue.ToString("F", New CurrentCultureFormatProvider())
      Console.WriteLine(value)
      Console.WriteLine()
      Dim composite As String = String.Format(New CurrentCultureFormatProvider, 
                                              "Date: {0:d}   Amount: {1:C}   Description: {2}",
                                              dateValue, 1264.03d, "Service Charge")
      Console.WriteLine(composite)
      Console.WriteLine()
   End Sub
End Module
' The example displays output like the following:
'       Requesting an object of type DateTimeFormatInfo
'       Tuesday, May 28, 2013 1:30:00 PM
'       
'       Requesting an object of type ICustomFormatter
'       Requesting an object of type DateTimeFormatInfo
'       Requesting an object of type NumberFormatInfo
'       Date: 5/28/2013   Amount: $1,264.03   Description: Service Charge

Строки форматов и свойства DateTimeFormatInfoFormat strings and DateTimeFormatInfo properties

DateTimeFormatInfo Объект включает в себя три типа свойства, используемые в операциях форматирования со значениями даты и времени:The DateTimeFormatInfo object includes three kinds of properties that are used in formatting operations with date and time values:

  • Свойства, связанных с календарем.Calendar-related properties. Свойства, такие как AbbreviatedDayNames, AbbreviatedMonthNames, DayNames, и MonthNames, связаны с календарь, используемый язык и региональные параметры, которая определяется Calendar свойство.Properties such as AbbreviatedDayNames, AbbreviatedMonthNames, DayNames, and MonthNames, are associated with the calendar used by the culture, which is defined by the Calendar property. Эти свойства используются для даты и времени форматов.These properties are used for long date and time formats.

  • Свойства, которые образуют определенные стандарты результирующую строку.Properties that produce a standards-defined result string. RFC1123Pattern, SortableDateTimePattern, И UniversalSortableDateTimePattern свойства содержат строк настраиваемого формата, создавать результирующие строки, определенные с международными стандартами.The RFC1123Pattern, SortableDateTimePattern, and UniversalSortableDateTimePattern properties contain custom format strings that produce result strings defined by international standards. Эти свойства доступны только для чтения и не может быть изменен.These properties are read-only and cannot be modified.

  • Свойства, определяющие строки результата с учетом языка и региональных параметров.Properties that define culture-sensitive result strings. Некоторые свойства, такие как FullDateTimePattern и ShortDatePattern, содержат строк настраиваемого формата , укажите формат результирующей строки.Some properties, such as FullDateTimePattern and ShortDatePattern, contain custom format strings that specify the format of the result string. Другие, такие как AMDesignator, DateSeparator, PMDesignator, и TimeSeparator, определить символы с учетом языка и региональных параметров или подстрок, которые могут быть включены в результирующую строку.Others, such as AMDesignator, DateSeparator, PMDesignator, and TimeSeparator, define culture-sensitive symbols or substrings that can be included in a result string.

Стандартных форматов даты и времени строки, такие как «d», «D», «f» и «F», — это псевдонимы, которые соответствуют определенным DateTimeFormatInfo форматирование свойства шаблона.The standard date and time format strings, such as "d", "D", "f", and "F", are aliases that correspond to particular DateTimeFormatInfo format pattern properties. Большая часть настраиваемых форматов даты и времени строки связаны с строк или подстрок, операция форматирования вставляет в результирующем потоке.Most of the custom date and time format strings are related to strings or substrings that a formatting operation inserts into the result stream. В следующей таблице перечислены стандартные и настраиваемые даты и времени описателей формата, а связанные с ними DateTimeFormatInfo свойства.The following table lists the standard and custom date and time format specifiers and their associated DateTimeFormatInfo properties. Сведения о том, как использовать эти описатели формата, см. в разделе Standard Date и Time Format Strings и Custom Date и Time Format Strings.For details about how to use these format specifiers, see Standard Date and Time Format Strings and Custom Date and Time Format Strings. Обратите внимание, что соответствует каждой строки стандартного формата DateTimeFormatInfo свойства, значение которого представляет собой пользовательского формата даты и времени.Note that each standard format string corresponds to a DateTimeFormatInfo property whose value is a custom date and time format string. Отдельные спецификаторы в данной строке настраиваемого формата в свою очередь соответствуют другу DateTimeFormatInfo свойства.The individual specifiers in this custom format string in turn correspond to other DateTimeFormatInfo properties. В таблице перечислены только DateTimeFormatInfo свойства, для которых — это псевдонимы строк стандартного формата и выполняет не перечислены свойства, которые может получить доступ к назначены эти свойства-псевдонимы строк настраиваемого формата.The table lists only the DateTimeFormatInfo properties for which the standard format strings are aliases, and does not list properties that may be accessed by custom format strings assigned to those aliased properties. Кроме того, в таблице перечислены только настраиваемых описателей формата, которые соответствуют DateTimeFormatInfo свойства.In addition, the table lists only custom format specifiers that correspond to DateTimeFormatInfo properties.

Описатель форматаFormat specifier Связанные свойстваAssociated properties
«d» (краткий формат даты, строка стандартного формата)"d" (short date; standard format string) ShortDatePattern, чтобы определить общий формат результирующей строки.ShortDatePattern, to define the overall format of the result string.
«D» (длинный формат даты, строка стандартного формата)"D" (long date; standard format string) LongDatePattern, чтобы определить общий формат результирующей строки.LongDatePattern, to define the overall format of the result string.
«f» (полная дата / краткая времени; Стандартная строка формата)"f" (full date / short time; standard format string) LongDatePattern, чтобы определить формат компонента даты результирующей строки.LongDatePattern, to define the format of the date component of the result string.

ShortTimePattern, чтобы определить формат компонента времени результирующей строки.ShortTimePattern, to define the format of the time component of the result string.
«F» (полная дата / длительное время; строка стандартного формата)"F" (full date / long time; standard format string) LongDatePattern, чтобы определить формат компонента даты результирующей строки.LongDatePattern, to define the format of the date component of the result string.

LongTimePattern, чтобы определить формат компонента времени результирующей строки.LongTimePattern, to define the format of the time component of the result string.
«g» (полный формат даты и краткий формат времени; строка стандартного формата)"g" (general date / short time; standard format string) ShortDatePattern, чтобы определить формат компонента даты результирующей строки.ShortDatePattern, to define the format of the date component of the result string.

ShortTimePattern, чтобы определить формат компонента времени результирующей строки.ShortTimePattern, to define the format of the time component of the result string.
«G» (полный формат даты / времени времени; в стандартный строка формата)"G" (general date / long time; standard format string) ShortDatePattern, чтобы определить формат компонента даты результирующей строки.ShortDatePattern, to define the format of the date component of the result string.

LongTimePattern, чтобы определить формат компонента времени результирующей строки.LongTimePattern, to define the format of the time component of the result string.
«M», «m» (месяц/день; строка стандартного формата)"M", "m" (month/day; standard format string) MonthDayPattern, чтобы определить общий формат результирующей строки.MonthDayPattern, to define the overall format of the result string.
«O», «o» (обратного преобразования даты и времени; строка стандартного формата)"O", "o" (round-trip date/time; standard format string) Отсутствует.None.
«R», «r» (RFC1123; строка стандартного формата)"R", "r" (RFC1123; standard format string) RFC1123Pattern, чтобы определить результирующую строку, которая соответствует стандарту RFC 1123.RFC1123Pattern, to define a result string that conforms to the RFC 1123 standard. Свойство доступно только для чтения.The property is read-only.
«s» (Сортируемый формат даты/времени; строка стандартного формата)"s" (sortable date/time; standard format string) SortableDateTimePattern, чтобы определить результирующую строку, которая соответствует стандарту ISO 8601.SortableDateTimePattern, to define a result string that conforms to the ISO 8601 standard. Свойство доступно только для чтения.The property is read-only.
«t» (краткий формат времени; строка стандартного формата)"t" (short time; standard format string) ShortTimePattern, чтобы определить общий формат результирующей строки.ShortTimePattern, to define the overall format of the result string.
«T» (долго; строка стандартного формата)"T" (long time; standard format string) LongTimePattern, чтобы определить общий формат результирующей строки.LongTimePattern, to define the overall format of the result string.
«u» (универсальный формат даты времени; строка стандартного формата)"u" (universal sortable date/time; standard format string) UniversalSortableDateTimePattern, для определения результата строку, которая соответствует стандарту ISO 8601 для формате UTC.UniversalSortableDateTimePattern, to define a result string that conforms to the ISO 8601 standard for coordinated universal time. Свойство доступно только для чтения.The property is read-only.
«U» (универсальный полный формат даты/времени; строка стандартного формата)"U" (universal full date/time; standard format string) FullDateTimePattern, чтобы определить общий формат результирующей строки.FullDateTimePattern, to define the overall format of the result string.
«Y», «y» (месяц года; строка стандартного формата)"Y", "y" (year month; standard format string) YearMonthPattern, чтобы определить общий формат результирующей строки.YearMonthPattern, to define the overall format of the result string.
«ddd» (настраиваемый описатель формата)"ddd" (custom format specifier) AbbreviatedDayNames, чтобы включить в результирующую строку сокращенное название дня недели.AbbreviatedDayNames, to include the abbreviated name of the day of the week in the result string.
«g», «gg» (настраиваемый описатель формата)"g", "gg" (custom format specifier) Вызовы GetEraName метод, чтобы вставить имя эру в результирующую строку.Calls the GetEraName method to insert the era name in the result string.
«MMM» (настраиваемый описатель формата)"MMM" (custom format specifier) AbbreviatedMonthNames, чтобы включить в результирующую строку сокращенное название месяца.AbbreviatedMonthNames, to include the abbreviated month name in the result string.
«MMMM» (настраиваемый описатель формата)"MMMM" (custom format specifier) MonthNames или MonthGenitiveNamesдля включения в результирующую строку полное название месяца.MonthNames or MonthGenitiveNames, to include the full month name in the result string.
«t» (настраиваемый описатель формата)"t" (custom format specifier) AMDesignator или PMDesignatorс целью включить первый символ указателя AM/PM в результирующей строке.AMDesignator or PMDesignator, to include the first character of the AM/PM designator in the result string.
«tt» (настраиваемый описатель формата)"tt" (custom format specifier) AMDesignator или PMDesignator, чтобы включить полный указатель AM/PM в результирующей строке.AMDesignator or PMDesignator, to include the full AM/PM designator in the result string.
«:» (настраиваемый описатель формата)":" (custom format specifier) TimeSeparator, чтобы включить в результирующую строку разделителя времени.TimeSeparator, to include the time separator in the result string.
«/» (настраиваемый описатель формата)"/" (custom format specifier) DateSeparator, для включения в результирующую строку разделителя даты.DateSeparator, to include the date separator in the result string.

Изменение свойства DateTimeFormatInfoModifying DateTimeFormatInfo properties

Можно изменить строк, формируемых строк формата даты и времени, изменив связанных свойств доступный для записи DateTimeFormatInfo объекта.You can change the result string produced by date and time format strings by modifying the associated properties of a writable DateTimeFormatInfo object. Чтобы определить, если DateTimeFormatInfo объект доступен для записи, используйте IsReadOnly свойство.To determine if a DateTimeFormatInfo object is writable, use the IsReadOnly property. Чтобы настроить DateTimeFormatInfo объекта таким образом:To customize a DateTimeFormatInfo object in this way:

  1. Создать копию чтения и записи DateTimeFormatInfo объекта соглашения о форматировании которых требуется изменить.Create a read/write copy of a DateTimeFormatInfo object whose formatting conventions you want to modify. (См. в разделе создание экземпляра объекта DateTimeFormatInfo разделе.)(See the Instantiating a DateTimeFormatInfo object section.)

  2. Измените свойства или свойств, которые используются для создания нужного результирующей строки.Modify the property or properties that are used to produce the desired result string. (Сведения об использовании как форматирования методы DateTimeFormatInfo свойства для определения результирующие строки, см. в предыдущем разделе, строки форматов и свойства DateTimeFormatInfo.)(For information about how formatting methods use DateTimeFormatInfo properties to define result strings, see the previous section, Format strings and DateTimeFormatInfo properties.)

  3. Использование настраиваемого DateTimeFormatInfo объект был создан как IFormatProvider аргументов в вызовах методов форматирования.Use the custom DateTimeFormatInfo object you created as the IFormatProvider argument in calls to formatting methods.

Существует два других способа для изменения формата строки результата:There are two other ways to change the format of a result string:

  • Можно использовать CultureAndRegionInfoBuilder класса для определения пользовательского языка и региональных параметров (язык и региональные параметры, имеет уникальное имя и который дополняет существующие языка и региональных параметров) или замены языка и региональных параметров (один, который используется вместо конкретного языка и региональных параметров).You can use the CultureAndRegionInfoBuilder class to define either a custom culture (a culture that has a unique name and that supplements existing cultures) or a replacement culture (one that is used instead of a specific culture). Можно сохранить и программный доступ к этой языка и региональных параметров, как любой CultureInfo объекта, поддерживаемые платформой .NET Framework.You can save and access this culture programmatically as you would any CultureInfo object supported by the .NET Framework.

  • Если не выполнить предварительно определенный формат результирующей строки не учитывает язык и региональные параметры, можно использовать пользовательского формата даты и времени.If the result string is not culture-sensitive and doesn't follow a predefined format, you can use a custom date and time format string. Например, при сериализации данных даты и времени в формате ггггммддччммсс, можно создать результирующую строку путем передачи строки пользовательского формата для DateTime.ToString(String) метод и можно преобразовать в результирующую строку к DateTime значение путем вызова метода DateTime.ParseExact метод.For example, if you are serializing date and time data in the format YYYYMMDDHHmmss, you can generate the result string by passing the custom format string to the DateTime.ToString(String) method, and you can convert the result string back to a DateTime value by calling the DateTime.ParseExact method.

Изменение шаблона короткого формата датыChanging the short date pattern

В следующем примере изменяется формат строк, формируемых строка стандартного формата «d» (краткий формат даты).The following example changes the format of a result string produced by the "d" (short date) standard format string. Он изменяет связанного ShortDatePattern свойство en US или русский (Россия) языка и региональных параметров, по умолчанию «М/гггг», чтобы «yyyy "-«MM»-«dd» и «d» стандартного формата строки для отображения даты до и после применения ShortDatePattern свойство изменить.It changes the associated ShortDatePattern property for the en-US or English (United States) culture from its default of "M/d/yyyy" to "yyyy'-"MM"-"dd" and uses the "d" standard format string to display the date both before and after the ShortDatePattern property is changed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 8, 18); 
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;
      
      Console.WriteLine("Before modifying DateTimeFormatInfo object: ");
      Console.WriteLine("{0}: {1}\n", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS));

      // Modify the short date pattern.
      dtfi.ShortDatePattern = "yyyy-MM-dd";
      Console.WriteLine("After modifying DateTimeFormatInfo object: ");
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS));
   }
}
// The example displays the following output:
//       Before modifying DateTimeFormatInfo object:
//       M/d/yyyy: 8/18/2013
//       
//       After modifying DateTimeFormatInfo object:
//       yyyy-MM-dd: 2013-08-18
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 08, 18) 
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      
      Console.WriteLine("Before modifying DateTimeFormatInfo object: ")
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS))
      Console.WriteLine()
      
      ' Modify the short date pattern.
      dtfi.ShortDatePattern = "yyyy-MM-dd"
      Console.WriteLine("After modifying DateTimeFormatInfo object: ")
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS))
   End Sub
End Module
' The example displays the following output:
'       Before modifying DateTimeFormatInfo object:
'       M/d/yyyy: 8/18/2013
'       
'       After modifying DateTimeFormatInfo object:
'       yyyy-MM-dd: 2013-08-18

Изменение знака разделения датыChanging the date separator character

В следующем примере изменяется знак разделителя даты в DateTimeFormatInfo , представляющий соглашения о форматировании языка и региональных параметров fr-FR.The following example changes the date separator character in a DateTimeFormatInfo object that represents the formatting conventions of the fr-FR culture. В примере используется строка стандартного формата «g» для отображения даты до и после DateSeparator изменении свойства.The example uses the "g" standard format string to display the date both before and after the DateSeparator property is changed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 08, 28); 
      CultureInfo frFR = CultureInfo.CreateSpecificCulture("fr-FR");
      DateTimeFormatInfo dtfi = frFR.DateTimeFormat;
      
      Console.WriteLine("Before modifying DateSeparator property: {0}",
                        dateValue.ToString("g", frFR));
      
      // Modify the date separator.
      dtfi.DateSeparator = "-";
      Console.WriteLine("After modifying the DateSeparator property: {0}",
                        dateValue.ToString("g", frFR));
   }
}
// The example displays the following output:
//       Before modifying DateSeparator property: 18/08/2013 00:00
//       After modifying the DateSeparator property: 18-08-2013 00:00
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 08, 28) 
      Dim frFR As CultureInfo = CultureInfo.CreateSpecificCulture("fr-FR")
      Dim dtfi As DateTimeFormatInfo = frFR.DateTimeFormat
      
      Console.WriteLine("Before modifying DateSeparator property: {0}",
                        dateValue.ToString("g", frFR))
      
      ' Modify the date separator.
      dtfi.DateSeparator = "-"
      Console.WriteLine("After modifying the DateSeparator property: {0}",
                        dateValue.ToString("g", frFR))
   End Sub
End Module
' The example displays the following output:
'       Before modifying DateSeparator property: 28/08/2013 00:00
'       After modifying the DateSeparator property: 28-08-2013 00:00

Изменение сокращенные названия дней и шаблоном длинной датыChanging day name abbreviations and the long date pattern

В некоторых случаях шаблон полной даты, который обычно отображает полный день и название месяца, а также номер дня месяца и года, может быть слишком много времени.In some cases, the long date pattern, which typically displays the full day and month name along with the number of the day of the month and the year, may be too long. Следующий пример сокращает шаблон полной даты для языка и региональных параметров en US для возврата сокращение названия дня одного символа или двух символов, за которым следует число дней, сокращение названия месяца и года.The following example shortens the long date pattern for the en-US culture to return a one-character or two-character day name abbreviation followed by the day number, the month name abbreviation, and the year. Это достигается путем назначения короче сокращенные названия дня для AbbreviatedDayNames массива и изменяя строкой пользовательского формата, назначенной LongDatePattern свойство.It does this by assigning shorter day name abbreviations to the AbbreviatedDayNames array, and by modifying the custom format string assigned to the LongDatePattern property. Это влияет на результат строк, возвращаемых «D» и строки стандартного формата «f».This affects the result strings returned by the "D" and "f" standard format strings.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime value = new DateTime(2013, 7, 9);
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;
      String[] formats = { "D", "F", "f" };

      // Display date before modifying properties.
      foreach (var fmt in formats)
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi));

      Console.WriteLine();
      
      // We don't want to change the FullDateTimePattern, so we need to save it.
      String originalFullDateTimePattern = dtfi.FullDateTimePattern;
      
      // Modify day name abbreviations and long date pattern.
      dtfi.AbbreviatedDayNames = new String[] { "Su", "M", "Tu", "W", "Th", "F", "Sa" };
      dtfi.LongDatePattern = "ddd dd-MMM-yyyy";
      dtfi.FullDateTimePattern = originalFullDateTimePattern;
      foreach (var fmt in formats)
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi));

   }
}
// The example displays the following output:
//       D: Tuesday, July 09, 2013
//       F: Tuesday, July 09, 2013 12:00:00 AM
//       f: Tuesday, July 09, 2013 12:00 AM
//       
//       D: Tu 09-Jul-2013
//       F: Tuesday, July 09, 2013 12:00:00 AM
//       f: Tu 09-Jul-2013 12:00 AM
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim value As New Date(2013, 7, 9)
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      Dim formats() As String = { "D", "F", "f" }

      ' Display date before modifying properties.
      For Each fmt In formats
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' We don't want to change the FullDateTimePattern, so we need to save it.
      Dim originalFullDateTimePattern As String = dtfi.FullDateTimePattern
      
      ' Modify day name abbreviations and long date pattern.
      dtfi.AbbreviatedDayNames = { "Su", "M", "Tu", "W", "Th", "F", "Sa" }
      dtfi.LongDatePattern = "ddd dd-MMM-yyyy"
      dtfi.FullDateTimePattern = originalFullDateTimePattern
      For Each fmt In formats
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi))
      Next
   End Sub
End Module
' The example displays the following output:
'       D: Tuesday, July 09, 2013
'       F: Tuesday, July 09, 2013 12:00:00 AM
'       f: Tuesday, July 09, 2013 12:00 AM
'       
'       D: Tu 09-Jul-2013
'       F: Tuesday, July 09, 2013 12:00:00 AM
'       f: Tu 09-Jul-2013 12:00 AM

Как правило, изменение LongDatePattern также влияет на свойство FullDateTimePattern свойство, которое в свою очередь определяет результат строка, возвращаемая строка стандартного формата «F».Ordinarily, the change to the LongDatePattern property also affects the FullDateTimePattern property, which in turn defines the result string returned by the "F" standard format string. Чтобы сохранить исходный полный шаблон даты и времени, пример переназначает исходную строку пользовательского формата, назначенные FullDateTimePattern свойства после LongDatePattern изменяется свойство.To preserve the original full date and time pattern, the example reassigns the original custom format string assigned to the FullDateTimePattern property after the LongDatePattern property is modified.

Изменение в 24-часовом формате с в 12-часовом форматеChanging from a 12-hour clock to a 24-hour clock

Для многих языков в .NET Framework время задается с помощью 12-часовом формате и указатель AM/PM.For many cultures in the .NET Framework, the time is expressed by using a 12-hour clock and an AM/PM designator. В следующем примере определяется ReplaceWith24HourClock метод, который заменяет любой формат времени, используется 12-часовом формате с форматом, который использует 24-часовом формате.The following example defines a ReplaceWith24HourClock method that replaces any time format that uses a 12-hour clock with a format that uses a 24-hour clock.

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;

      Console.WriteLine("Original Property Values:");
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern);
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern);
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern);
      Console.WriteLine();
      
      dtfi.LongTimePattern = ReplaceWith24HourClock(dtfi.LongTimePattern);
      dtfi.ShortTimePattern = ReplaceWith24HourClock(dtfi.ShortTimePattern);
      
      Console.WriteLine("Modififed Property Values:");
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern);
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern);
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern);
   }     
   
   private static string ReplaceWith24HourClock(string fmt)
   {
      string pattern = @"^(?<openAMPM>\s*t+\s*)? " +
                       @"(?(openAMPM) h+(?<nonHours>[^ht]+)$ " +
                       @"| \s*h+(?<nonHours>[^ht]+)\s*t+)";
      return Regex.Replace(fmt, pattern, "HH${nonHours}", 
                           RegexOptions.IgnorePatternWhitespace);   
   }
}
// The example displays the following output:
//       Original Property Values:
//       ShortTimePattern: h:mm tt
//       LongTimePattern: h:mm:ss tt
//       FullDateTimePattern: dddd, MMMM dd, yyyy h:mm:ss tt
//       
//       Modififed Property Values:
//       ShortTimePattern: HH:mm
//       LongTimePattern: HH:mm:ss
//       FullDateTimePattern: dddd, MMMM dd, yyyy HH:mm:ss
Imports System.Globalization
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat

      Console.WriteLine("Original Property Values:")
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern)
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern)
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern)
      Console.WriteLine()
      
      dtfi.LongTimePattern = ReplaceWith24HourClock(dtfi.LongTimePattern)
      dtfi.ShortTimePattern = ReplaceWith24HourClock(dtfi.ShortTimePattern)
      
      Console.WriteLine("Modififed Property Values:")
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern)
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern)
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern)
   End Sub
   
   Private Function ReplaceWith24HourClock(fmt As String) As String
      Dim pattern As String = "^(?<openAMPM>\s*t+\s*)? " +
                              "(?(openAMPM) h+(?<nonHours>[^ht]+)$ " +
                              "| \s*h+(?<nonHours>[^ht]+)\s*t+)"
      Return Regex.Replace(fmt, pattern, "HH${nonHours}", RegexOptions.IgnorePatternWhitespace)   
   End Function
End Module
' The example displays the following output:
'       Original Property Values:
'       ShortTimePattern: h:mm tt
'       LongTimePattern: h:mm:ss tt
'       FullDateTimePattern: dddd, MMMM dd, yyyy h:mm:ss tt
'       
'       Modififed Property Values:
'       ShortTimePattern: HH:mm
'       LongTimePattern: HH:mm:ss
'       FullDateTimePattern: dddd, MMMM dd, yyyy HH:mm:ss

В примере используется регулярное выражение для изменения формата строки.The example uses a regular expression to modify the format string. Шаблон регулярного выражения @"^(?<openAMPM>\s*t+\s*)? (?(openAMPM) h+(?<nonHours>[^ht]+)$ | \s*h+(?<nonHours>[^ht]+)\s*t+) определяется следующим образом:The regular expression pattern @"^(?<openAMPM>\s*t+\s*)? (?(openAMPM) h+(?<nonHours>[^ht]+)$ | \s*h+(?<nonHours>[^ht]+)\s*t+) is defined as follows:

ШаблонPattern ОписаниеDescription
^ Начало совпадения в начале строки.Begin the match at the beginning of the string.
(?<openAMPM>\s*t+\s*)? Совпадение ноль или одно вхождение ноль или более пробелов, символов, заканчивающаяся буквой «t», один или несколько раз, за которой следует ноль или более символов пробела.Match zero or one occurrence of zero or more white-space characters, followed by the letter "t" one or more times, followed by zero or more white-space characters. Эта группа записи называется openAMPM.This capturing group is named openAMPM.
(?(openAMPM) h+(?<nonHours>[^ht]+)$ Если openAMPM группа имеет совпадение, соответствует букве «h» на один или несколько раз, за которыми следует один или несколько символов, которые не являются ни «h», ни «t».If the openAMPM group has a match, match the letter "h" one or more times, followed by one or more characters that are neither "h" nor "t". Соответствие заканчивается в конце строки.The match ends at the end of the string. Все символы, записанные после включения «h» в группе записи с именем nonHours.All characters captured after "h" are included in a capturing group named nonHours.
&#124; \s*h+(?<nonHours>[^ht]+)\s*t+) Если openAMPM группы нет соответствий, соответствует букве «h» один или несколько раз, за которыми следует один или несколько символов, которые не являются ни «h», ни «t», за которой следует ноль или более символов пробела.If the openAMPM group does not have a match, match the letter "h" one or more times, followed by one or more characters that are neither "h" nor "t", followed by zero or more white-space characters. Наконец сопоставление одного или нескольких вхождений букву «t».Finally, match one or more occurrences of the letter "t". Все символы, записанные после «h», а также перед пробельные символы и «t», включенных в группе записи с именем nonHours.All characters captured after "h" and before the white-spaces and "t" are included in a capturing group named nonHours.

nonHours Захваченная группа содержит минуты и, возможно, компонент секунд текущего пользовательского формата даты и времени, наряду с символы разделителя времени.The nonHours capturing group contains the minute and possibly the second component of a custom date and time format string, along with any time separator symbols. Шаблон замены HH${nonHours} добавляет в начало подстроки «HH» для этих элементов.The replacement pattern HH${nonHours} prepends the substring "HH" to these elements.

Отображение и изменение эру в датуDisplaying and changing the era in a date

В следующем примере добавляется описатель настраиваемого формата «g», чтобы LongDatePattern свойства объекта, представляющий соглашения о форматировании языка и региональных параметров en US.The following example adds the "g" custom format specifier to the LongDatePattern property of an object that represents the formatting conventions of the en-US culture. Это дополнение влияет на следующие три строки стандартного формата:This addition affects the following three standard format strings:

  • Строки стандартного формата «D» (даты), который не сопоставляется непосредственно с LongDatePattern свойство.The "D" (long date) standard format string, which maps directly to the LongDatePattern property.

  • «f» (полная дата / время краткая) строка стандартного формата, который формирует результирующую строку, представляющим собой сцепление подстрок, созданные LongDatePattern и ShortTimePattern свойства.The "f" (full date / short time) standard format string, which produces a result string that concatenates the substrings produced by the LongDatePattern and ShortTimePattern properties.

  • «F» (полная дата / полный формат времени) строка стандартного формата, который сопоставляется непосредственно с FullDateTimePattern свойство.The "F" (full date / long time) standard format string, which maps directly to the FullDateTimePattern property. Так как мы не задали явным образом значение этого свойства, он формируется динамически путем сцепления LongDatePattern и LongTimePattern свойства.Because we have not explicitly set this property value, it is generated dynamically by concatenating the LongDatePattern and LongTimePattern properties.

В примере также как изменить имя эры для языка и региональных параметров, чей календарь имеет одну эру.The example also shows how to change the era name for a culture whose calendar has a single era. В этом случае en-US использует григорианский календарь, представленный GregorianCalendar объекта.In this case, the en-US culture uses the Gregorian calendar, which is represented by a GregorianCalendar object. GregorianCalendar Класс поддерживает одну эру, который его именует н. э.The GregorianCalendar class supports a single era, which it names A.D. (Полуночи).(Anno Domini). В примере изменяется имя эры на года нашей эрыThe example changes the era name to C.E. (Нашей эры), заменив описатель настраиваемого формата «g» в строке формата, назначенные FullDateTimePattern свойство со строковым литералом.(Common Era) by replacing the "g" custom format specifier in the format string assigned to the FullDateTimePattern property with a literal string. Использование строкового литерала необходима, так как название эры обычно возвращается GetEraName метода из личных данных в таблицах язык и региональные параметры, предоставляемые .NET Framework или операционной системы Windows.The use of a literal string is necessary, because the era name is typically returned by the GetEraName method from private data in the culture tables supplied by either the .NET Framework or the Windows operating system.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 5, 18, 13, 30, 0);
      String[] formats = { "D", "f", "F" };      
      
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;
      String originalLongDatePattern = dtfi.LongDatePattern;

      // Display the default form of three long date formats.
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));

      Console.WriteLine();
      
      // Modify the long date pattern.
      dtfi.LongDatePattern = originalLongDatePattern + " g";
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));

      Console.WriteLine();
      
      // Change A.D. to C.E. (for Common Era)
      dtfi.LongDatePattern = originalLongDatePattern + @" 'C.E.'";
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));

   }
}
// The example displays the following output:
//       Saturday, May 18, 2013
//       Saturday, May 18, 2013 1:30 PM
//       Saturday, May 18, 2013 1:30:00 PM
//       
//       Saturday, May 18, 2013 A.D.
//       Saturday, May 18, 2013 A.D. 1:30 PM
//       Saturday, May 18, 2013 A.D. 1:30:00 PM
//       
//       Saturday, May 18, 2013 C.E.
//       Saturday, May 18, 2013 C.E. 1:30 PM
//       Saturday, May 18, 2013 C.E. 1:30:00 PM
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 5, 18, 13, 30, 0)
      Dim formats() As String = { "D", "f", "F" }      
      
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      Dim originalLongDatePattern As String = dtfi.LongDatePattern

      ' Display the default form of three long date formats.
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' Modify the long date pattern.
      dtfi.LongDatePattern = originalLongDatePattern + " g"
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' Change A.D. to C.E. (for Common Era)
      dtfi.LongDatePattern = originalLongDatePattern + " 'C.E.'"
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
   End Sub
End Module
' The example displays the following output:
'       Saturday, May 18, 2013
'       Saturday, May 18, 2013 1:30 PM
'       Saturday, May 18, 2013 1:30:00 PM
'       
'       Saturday, May 18, 2013 A.D.
'       Saturday, May 18, 2013 A.D. 1:30 PM
'       Saturday, May 18, 2013 A.D. 1:30:00 PM
'       
'       Saturday, May 18, 2013 C.E.
'       Saturday, May 18, 2013 C.E. 1:30 PM
'       Saturday, May 18, 2013 C.E. 1:30:00 PM

Анализ строк даты и времениParsing date and time strings

Синтаксический анализ включает в себя преобразование строковое представление даты и времени в DateTime или DateTimeOffset значение.Parsing involves converting the string representation of a date and time to a DateTime or DateTimeOffset value. Оба этих типа включают Parse, TryParse, ParseExact, и TryParseExact методы, поддерживающие операции синтаксического анализа.Both of these types include the Parse, TryParse, ParseExact, and TryParseExact methods to support parsing operations. Parse И TryParse методы преобразования строки, которая может иметь различные форматы, тогда как ParseExact и TryParseExact требуют наличия строки определенный формат или форматов.The Parse and TryParse methods convert a string that can have a variety of formats, whereas ParseExact and TryParseExact require that the string have a defined format or formats. При сбое операции синтаксического анализа Parse и ParseExact исключение, тогда как TryParse и TryParseExact возвращают false.If the parsing operation fails, Parse and ParseExact throw an exception, whereas TryParse and TryParseExact return false.

Методы анализа неявно или явно используют DateTimeStyles значение перечисления, чтобы определить, какие элементы стиля (такие как начальные, конечные и внутренние пробелы) могут присутствовать в анализируемой строке и как интерпретировать анализируемая строка или отсутствующих элементы.The parsing methods implicitly or explicitly use a DateTimeStyles enumeration value to determine which style elements (such as leading, trailing, or inner white space) can be present in the string to be parsed, and how to interpret the parsed string or any missing elements. Если вы не укажете DateTimeStyles значение при вызове Parse или TryParse , значение по умолчанию является DateTimeStyles.AllowWhiteSpaces, являющийся составной стиль, который включает в себя DateTimeStyles.AllowLeadingWhite, DateTimeStyles.AllowTrailingWhite, и DateTimeStyles.AllowInnerWhite флаги.If you don't provide a DateTimeStyles value when you call the Parse or TryParse method, the default is DateTimeStyles.AllowWhiteSpaces, which is a composite style that includes the DateTimeStyles.AllowLeadingWhite, DateTimeStyles.AllowTrailingWhite, and DateTimeStyles.AllowInnerWhite flags. Для ParseExact и TryParseExact методов, по умолчанию используется DateTimeStyles.None; входная строка должно соответствовать точно определенного настраиваемые дата и время, в строку формата.For the ParseExact and TryParseExact methods, the default is DateTimeStyles.None; the input string must correspond precisely to a particular custom date and time format string.

Методы синтаксического анализа также неявно или явно используют DateTimeFormatInfo , определяющий специальные символы и шаблоны, которые может произойти в строке, который необходимо проанализировать.The parsing methods also implicitly or explicitly use a DateTimeFormatInfo object that defines the specific symbols and patterns that can occur in the string to be parsed. Если вы не укажете DateTimeFormatInfo объекта, DateTimeFormatInfo объекта для языка и региональных параметров текущего потока используется по умолчанию.If you don't provide a DateTimeFormatInfo object, the DateTimeFormatInfo object for the current thread culture is used by default. Дополнительные сведения о синтаксический анализ строк даты и времени, см. в разделе отдельные методы синтаксического анализа, таких как DateTime.Parse, DateTime.TryParse, DateTimeOffset.ParseExact, и DateTimeOffset.TryParseExact.For more information about parsing date and time strings, see the individual parsing methods, such as DateTime.Parse, DateTime.TryParse, DateTimeOffset.ParseExact, and DateTimeOffset.TryParseExact.

В следующем примере показано суть культуры строк синтаксического анализа даты и времени.The following example illustrates the culture-sensitive nature of parsing date and time strings. Предпринимается попытка выполнить анализ двух строк дат с помощью правил языка "en US", "en-GB", "fr-FR" и "fi-FI языков и региональных параметров.It tries to parse two date strings by using the conventions of the en-US, en-GB, fr-FR, and fi-FI cultures. Даты, который интерпретируется как 8/18/2014 в en US, языка и региональных параметров создает FormatException исключение в других трех культур, поскольку 18 интерпретируется как номер месяца.The date that is interpreted as 8/18/2014 in the en-US culture throws a FormatException exception in the other three cultures because 18 is interpreted as the month number. 1/2/2015 анализируется как второй день первого месяца в культуре en US, но в качестве первого дня месяца второго в оставшихся языков и региональных параметров.1/2/2015 is parsed as the second day of the first month in the en-US culture, but as the first day of the second month in the remaining cultures.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = { "08/18/2014", "01/02/2015" };
      string[] cultureNames = { "en-US", "en-GB", "fr-FR", "fi-FI" };
      
      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Console.WriteLine("Parsing strings using the {0} culture.", 
                           culture.Name);
         foreach (var dateStr in dateStrings) {
            try {
               Console.WriteLine(String.Format(culture, 
                                 "   '{0}' --> {1:D}", dateStr, 
                                 DateTime.Parse(dateStr, culture)));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to parse '{0}'", dateStr);
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing strings using the en-US culture.
//          '08/18/2014' --> Monday, August 18, 2014
//          '01/02/2015' --> Friday, January 02, 2015
//       Parsing strings using the en-GB culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> 01 February 2015
//       Parsing strings using the fr-FR culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> dimanche 1 février 2015
//       Parsing strings using the fi-FI culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> 1. helmikuuta 2015
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateStrings() As String = { "08/18/2014", "01/02/2015" }
      Dim cultureNames() As String = { "en-US", "en-GB", "fr-FR", "fi-FI" }
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Console.WriteLine("Parsing strings using the {0} culture.", 
                           culture.Name)
         For Each dateStr In dateStrings
            Try
               Console.WriteLine(String.Format(culture, 
                                 "   '{0}' --> {1:D}", dateStr, 
                                 DateTime.Parse(dateStr, culture)))
            Catch e As FormatException
               Console.WriteLine("   Unable to parse '{0}'", dateStr)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing strings using the en-US culture.
'          '08/18/2014' --> Monday, August 18, 2014
'          '01/02/2015' --> Friday, January 02, 2015
'       Parsing strings using the en-GB culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> 01 February 2015
'       Parsing strings using the fr-FR culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> dimanche 1 février 2015
'       Parsing strings using the fi-FI culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> 1. helmikuuta 2015

Строки даты и времени, обычно анализируются по двум причинам:Date and time strings are typically parsed for two reasons:

  • Для преобразования входных данных пользователя в значение даты и времени.To convert user input into a date and time value.

  • Выполнение цикла обработки значения даты и времени; то есть для десериализации значения даты и времени, который ранее был сериализован как строка.To round-trip a date and time value; that is, to deserialize a date and time value that was previously serialized as a string.

В следующих разделах рассматриваются эти две операции, более подробно.The following sections discuss these two operations in greater detail.

Синтаксический анализ строк пользователяParsing user strings

При синтаксическом анализе строки даты и времени, введенное пользователем, следует всегда создавать экземпляр DateTimeFormatInfo , который отражает региональные настройки пользователя, включая все настройки, пользователь может сделать.When you parse date and time strings input by the user, you should always instantiate a DateTimeFormatInfo object that reflects the user's cultural settings, including any customizations the user may have made. В противном случае объекта даты и времени могут иметь неверные значения.Otherwise, the date and time object may have incorrect values. Сведения о том, как создать экземпляр DateTimeFormatInfo , который отражает региональные настройки пользователя, см. в разделе DateTimeFormatInfo и динамические данные раздел.For information about how to instantiate a DateTimeFormatInfo object that reflects user cultural customizations, see the DateTimeFormatInfo and dynamic data section.

В следующем примере показано различие между операции анализа, которая отражает региональные настройки пользователя, а другая — нет.The following example illustrates the difference between a parsing operation that reflects user cultural settings and one that does not. Таким образом, язык и региональные параметры по умолчанию — en US, но пользователь использовал панели управления регион и язык Чтобы изменить шаблон короткого формата даты по умолчанию «М/гггг» на «гг/мм/дд».In this case, the default system culture is en-US, but the user has used Control Panel, Region and Language to change the short date pattern from its default of "M/d/yyyy" to "yy/MM/dd". Когда пользователь вводит строку, которая отражает параметры пользователя, и строка анализируется с DateTimeFormatInfo , который также отражает параметров пользователя (переопределения), операция анализа возвращает правильный результат.When the user enters a string that reflects user settings, and the string is parsed by a DateTimeFormatInfo object that also reflects user settings (overrides), the parsing operation returns a correct result. Тем не менее, когда строка анализируется с DateTimeFormatInfo , который отражает региональные настройки стандартных en US, синтаксического анализа методом исключения FormatException исключение, так как он интерпретирует 14 как число месяца, а не две последние цифры года.However, when the string is parsed by a DateTimeFormatInfo object that reflects standard en-US cultural settings, the parsing method throws a FormatException exception because it interprets 14 as the number of the month, not the last two digits of the year.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string inputDate = "14/05/10";
      
      CultureInfo[] cultures = { CultureInfo.GetCultureInfo("en-US"), 
                                 CultureInfo.CreateSpecificCulture("en-US") };
      
      foreach (var culture in cultures) {
         try {
            Console.WriteLine("{0} culture reflects user overrides: {1}", 
                              culture.Name, culture.UseUserOverride);
            DateTime occasion = DateTime.Parse(inputDate, culture);
            Console.WriteLine("'{0}' --> {1}", inputDate, 
                              occasion.ToString("D", CultureInfo.InvariantCulture));
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", inputDate);                           
         }   
         Console.WriteLine();  
      }
   }
}
// The example displays the following output:
//       en-US culture reflects user overrides: False
//       Unable to parse '14/05/10'
//       
//       en-US culture reflects user overrides: True
//       '14/05/10' --> Saturday, 10 May 2014
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputDate As String = "14/05/10"
      
      Dim cultures() As CultureInfo = { CultureInfo.GetCultureInfo("en-US"), 
                                        CultureInfo.CreateSpecificCulture("en-US") }
      
      For Each culture In cultures
         Try
            Console.WriteLine("{0} culture reflects user overrides: {1}", 
                              culture.Name, culture.UseUserOverride)
            Dim occasion As DateTime = DateTime.Parse(inputDate, culture)
            Console.WriteLine("'{0}' --> {1}", inputDate, 
                              occasion.ToString("D", CultureInfo.InvariantCulture))
         Catch e As FormatException
            Console.WriteLine("Unable to parse '{0}'", inputDate)                           
         End Try   
         Console.WriteLine()  
      Next
   End Sub
End Module
' The example displays the following output:
'       en-US culture reflects user overrides: False
'       Unable to parse '14/05/10'
'       
'       en-US culture reflects user overrides: True
'       '14/05/10' --> Saturday, 10 May 2014

Сериализации и десериализации данных даты и времениSerializing and deserializing date and time data

Сериализовать данные даты и времени должны выполнить цикл обработки; то есть все сериализации и десериализованные значения должны быть идентичными.Serialized date and time data are expected to round-trip; that is, all serialized and deserialized values should be identical. Если значение даты и времени представляет один момент времени, десериализованное значение должно представлять один и тот же момент времени независимо от языка и региональных параметров или часового пояса системы, на котором он был восстановлен.If a date and time value represents a single moment in time, the deserialized value should represent the same moment in time regardless of the culture or time zone of the system on which it was restored. Для данных обратного преобразования даты и времени успешно, необходимо использовать соглашения инвариантных региональных параметров, который возвращается методом InvariantInfo свойства, чтобы создавать и анализировать данные.To round-trip date and time data successfully, you must use the conventions of the invariant culture, which is returned by the InvariantInfo property, to generate and parse the data. Операции форматирования и синтаксического анализа должно никогда не соответствуют правилам культуры по умолчанию.The formatting and parsing operations should never reflect the conventions of the default culture. Если вы используете региональные настройки по умолчанию, мобильность данных строго ограничены; Это может быть успешно десериализован только в потоке, региональные параметры потока, на котором он был сериализован идентичны.If you use default cultural settings, the portability of the data is strictly limited; it can be successfully deserialized only on a thread whose cultural-specific settings are identical to those of the thread on which it was serialized. В некоторых случаях это означает, что данные нельзя даже успешно сериализовать и десериализовать в одной системе.In some cases, this means that the data cannot even be successfully serialized and deserialized on the same system.

Если компонент времени в значении даты и времени является существенным, ее нужно также преобразуется в формат UTC и сериализации с помощью «o» или «r» строка стандартного формата.If the time component of a date and time value is significant, it should also be converted to UTC and serialized by using the "o" or "r" standard format string. Впоследствии можно восстановить данные времени путем вызова методу анализа и передает его в формат, соответствующий строку вместе с инвариантным языком как provider аргумент.The time data can then be restored by calling a parsing method and passing it the appropriate format string along with the invariant culture as the provider argument.

Следующий пример иллюстрирует процесс цикла обработки значения даты и времени.The following example illustrates the process of round-tripping a date and time value. Он сериализует датой и временем в системе, которая обнаруживает США По тихоокеанскому времени и которого текущий язык — en US.It serializes a date and time on a system that observes U.S. Pacific time and whose current culture is en-US.

using System;
using System.Globalization;
using System.IO;

public class Example
{
   public static void Main()
   {
      StreamWriter sw = new StreamWriter(@".\DateData.dat");
      // Define a date and time to serialize.
      DateTime originalDate = new DateTime(2014, 08, 18, 08, 16, 35);
      // Display information on the date and time.
      Console.WriteLine("Date to serialize: {0:F}", originalDate);
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName);
      // Convert the date value to UTC.
      DateTime utcDate = originalDate.ToUniversalTime();
      // Serialize the UTC value.
      sw.Write(utcDate.ToString("o", DateTimeFormatInfo.InvariantInfo));
      sw.Close();
   }
}
// The example displays the following output:
//       Date to serialize: Monday, August 18, 2014 8:16:35 AM
//       Current Culture:   en-US
//       Time Zone:         (UTC-08:00) Pacific Time (US & Canada)
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      Dim sw As New StreamWriter(".\DateData.dat")
      ' Define a date and time to serialize.
      Dim originalDate As New Date(2014, 08, 18, 08, 16, 35)
      ' Display information on the date and time.
      Console.WriteLine("Date to serialize: {0:F}", originalDate)
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName)
      ' Convert the date value to UTC.
      Dim utcDate As Date = originalDate.ToUniversalTime()
      ' Serialize the UTC value.
      sw.Write(utcDate.ToString("o", DateTimeFormatInfo.InvariantInfo))
      sw.Close()
   End Sub
End Module
' The example displays the following output:
'       Date to serialize: Monday, August 18, 2014 8:16:35 AM
'       Current Culture:   en-US
'       Time Zone:         (UTC-08:00) Pacific Time (US & Canada)

Он выполняет десериализацию данных в системе в часовом поясе Брюссель, Копенгаген, Мадрид и Париж и которого текущий язык — fr-FR.It deserializes the data on a system in the Brussels, Copenhagen, Madrid and Paris time zone and whose current culture is fr-FR. Извлеченные дата является более поздней версии, чем исходное, что отражает изменение часового пояса из восьми часов отстает от времени UTC, до одного часа раньше UTC девять часов.The restored date is nine hours later than the original date, which reflects the time zone adjustment from eight hours behind UTC to one hour ahead of UTC. Исходная дата и извлеченные Дата представляют один и тот же момент времени.Both the original date and the restored date represent the same moment in time.

using System;
using System.Globalization;
using System.IO;

public class Example
{
   public static void Main()
   {
      // Open the file and retrieve the date string.
      StreamReader sr = new StreamReader(@".\DateData.dat");             
      String dateValue = sr.ReadToEnd();
      
      // Parse the date.
      DateTime parsedDate = DateTime.ParseExact(dateValue, "o", 
                            DateTimeFormatInfo.InvariantInfo);
      // Convert it to local time.                             
      DateTime restoredDate = parsedDate.ToLocalTime();
      // Display information on the date and time.
      Console.WriteLine("Deserialized date: {0:F}", restoredDate);
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName);
   }
}
// The example displays the following output:
//    Deserialized date: lundi 18 août 2014 17:16:35
//    Current Culture:   fr-FR
//    Time Zone:         (UTC+01:00) Brussels, Copenhagen, Madrid, Paris
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      ' Open the file and retrieve the date string.
      Dim sr As New StreamReader(".\DateData.dat")             
      Dim dateValue As String = sr.ReadToEnd()
      
      ' Parse the date.
      Dim parsedDate As Date = Date.ParseExact(dateValue, "o", 
                               DateTimeFormatInfo.InvariantInfo)
      ' Convert it to local time.                             
      Dim restoredDate As Date = parsedDate.ToLocalTime()
      ' Display information on the date and time.
      Console.WriteLine("Deserialized date: {0:F}", restoredDate)
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName)
   End Sub
End Module
' The example displays the following output:
'    Deserialized date: lundi 18 août 2014 17:16:35
'    Current Culture:   fr-FR
'    Time Zone:         (UTC+01:00) Brussels, Copenhagen, Madrid, Paris

Конструкторы

DateTimeFormatInfo() DateTimeFormatInfo() DateTimeFormatInfo() DateTimeFormatInfo()

Инициализирует новый доступный для записи экземпляр класса DateTimeFormatInfo, не зависящий от языка и региональных параметров (инвариантный).Initializes a new writable instance of the DateTimeFormatInfo class that is culture-independent (invariant).

Свойства

AbbreviatedDayNames AbbreviatedDayNames AbbreviatedDayNames AbbreviatedDayNames

Возвращает или задает одномерный массив типа String, содержащий сокращения дней недели, принятые в определенном языке и региональных параметрах.Gets or sets a one-dimensional array of type String containing the culture-specific abbreviated names of the days of the week.

AbbreviatedMonthGenitiveNames AbbreviatedMonthGenitiveNames AbbreviatedMonthGenitiveNames AbbreviatedMonthGenitiveNames

Возвращает или задает массив строк сокращенных названий месяцев, связанных с текущим объектом DateTimeFormatInfo.Gets or sets a string array of abbreviated month names associated with the current DateTimeFormatInfo object.

AbbreviatedMonthNames AbbreviatedMonthNames AbbreviatedMonthNames AbbreviatedMonthNames

Получает или задает одномерный строковый массив, содержащий сокращения месяцев, принятые в определенном языке и региональных параметрах.Gets or sets a one-dimensional string array that contains the culture-specific abbreviated names of the months.

AMDesignator AMDesignator AMDesignator AMDesignator

Возвращает или задает строку указателя часов до полудня (АМ — "ante meridiem").Gets or sets the string designator for hours that are "ante meridiem" (before noon).

Calendar Calendar Calendar Calendar

Возвращает или задает календарь, используемый в текущей языке и региональных параметрах.Gets or sets the calendar to use for the current culture.

CalendarWeekRule CalendarWeekRule CalendarWeekRule CalendarWeekRule

Возвращает или задает значение, определяющее правило, используемое для определения первой календарной недели года.Gets or sets a value that specifies which rule is used to determine the first calendar week of the year.

CurrentInfo CurrentInfo CurrentInfo CurrentInfo

Получает доступный только для чтения объект DateTimeFormatInfo, форматирующий значения на основе текущего языка и региональных параметров.Gets a read-only DateTimeFormatInfo object that formats values based on the current culture.

DateSeparator DateSeparator DateSeparator DateSeparator

Возвращает или задает строку, разделяющую компоненты даты — год, месяц и день.Gets or sets the string that separates the components of a date, that is, the year, month, and day.

DayNames DayNames DayNames DayNames

Получает или задает одномерный массив строк, содержащий полные названия дней недели, принятые в определенном языке и региональных параметрах.Gets or sets a one-dimensional string array that contains the culture-specific full names of the days of the week.

FirstDayOfWeek FirstDayOfWeek FirstDayOfWeek FirstDayOfWeek

Возвращает или задает первый день недели.Gets or sets the first day of the week.

FullDateTimePattern FullDateTimePattern FullDateTimePattern FullDateTimePattern

Получает или задает строку пользовательского формата для длинного значения даты и длинного значения времени.Gets or sets the custom format string for a long date and long time value.

InvariantInfo InvariantInfo InvariantInfo InvariantInfo

Получает доступный только для чтения объект по умолчанию DateTimeFormatInfo, который не зависит от языка и региональных параметров (инвариантный).Gets the default read-only DateTimeFormatInfo object that is culture-independent (invariant).

IsReadOnly IsReadOnly IsReadOnly IsReadOnly

Получает значение, показывающее, является ли объект DateTimeFormatInfo доступным только для чтения.Gets a value indicating whether the DateTimeFormatInfo object is read-only.

LongDatePattern LongDatePattern LongDatePattern LongDatePattern

Получает или задает строку пользовательского формата для длинного значения даты.Gets or sets the custom format string for a long date value.

LongTimePattern LongTimePattern LongTimePattern LongTimePattern

Получает или задает строку пользовательского формата для длинного значения времени.Gets or sets the custom format string for a long time value.

MonthDayPattern MonthDayPattern MonthDayPattern MonthDayPattern

Получает или задает строку пользовательского формата для значения месяца и дня.Gets or sets the custom format string for a month and day value.

MonthGenitiveNames MonthGenitiveNames MonthGenitiveNames MonthGenitiveNames

Возвращает или задает массив строк имен месяцев, связанных с текущим объектом DateTimeFormatInfo.Gets or sets a string array of month names associated with the current DateTimeFormatInfo object.

MonthNames MonthNames MonthNames MonthNames

Возвращает или задает одномерный массив типа String, содержащий полные названия месяцев, принятые в определенном языке и региональных параметрах.Gets or sets a one-dimensional array of type String containing the culture-specific full names of the months.

NativeCalendarName NativeCalendarName NativeCalendarName NativeCalendarName

Получает собственное имя календаря, связанного с текущим объектом DateTimeFormatInfo object.Gets the native name of the calendar associated with the current DateTimeFormatInfo object.

PMDesignator PMDesignator PMDesignator PMDesignator

Возвращает или задает строку указателя часов после полудня (PМ — "post meridiem").Gets or sets the string designator for hours that are "post meridiem" (after noon).

RFC1123Pattern RFC1123Pattern RFC1123Pattern RFC1123Pattern

Получает строку пользовательского формата для значения времени, основанного на спецификации IETF Request for Comments 1123 (RFC IETF).Gets the custom format string for a time value that is based on the Internet Engineering Task Force (IETF) Request for Comments (RFC) 1123 specification.

ShortDatePattern ShortDatePattern ShortDatePattern ShortDatePattern

Получает или задает строку пользовательского формата для короткого значения даты.Gets or sets the custom format string for a short date value.

ShortestDayNames ShortestDayNames ShortestDayNames ShortestDayNames

Возвращает или задает массив строк самых кратких уникальных сокращений имен дней, связанный с текущим объектом DateTimeFormatInfo.Gets or sets a string array of the shortest unique abbreviated day names associated with the current DateTimeFormatInfo object.

ShortTimePattern ShortTimePattern ShortTimePattern ShortTimePattern

Получает или задает строку пользовательского формата для короткого значения времени.Gets or sets the custom format string for a short time value.

SortableDateTimePattern SortableDateTimePattern SortableDateTimePattern SortableDateTimePattern

Получает строку пользовательского формата для сортируемого значения даты и времени.Gets the custom format string for a sortable date and time value.

TimeSeparator TimeSeparator TimeSeparator TimeSeparator

Возвращает или задает строку, разделяющую компоненты времени — час, минуты и секунды.Gets or sets the string that separates the components of time, that is, the hour, minutes, and seconds.

UniversalSortableDateTimePattern UniversalSortableDateTimePattern UniversalSortableDateTimePattern UniversalSortableDateTimePattern

Получает строку пользовательского формата для универсальной, сортируемой строки даты и времени в соответствии со стандартом ISO 8601.Gets the custom format string for a universal, sortable date and time string, as defined by ISO 8601.

YearMonthPattern YearMonthPattern YearMonthPattern YearMonthPattern

Получает или задает строку пользовательского формата для значения года и месяца.Gets or sets the custom format string for a year and month value.

Методы

Clone() Clone() Clone() Clone()

Создает неполную копию DateTimeFormatInfo.Creates a shallow copy of the DateTimeFormatInfo.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetAbbreviatedDayName(DayOfWeek) GetAbbreviatedDayName(DayOfWeek) GetAbbreviatedDayName(DayOfWeek) GetAbbreviatedDayName(DayOfWeek)

Возвращает полное название указанного дня недели, принятое в определенном языке и региональных параметрах, связанных с текущим объектом DateTimeFormatInfo.Returns the culture-specific abbreviated name of the specified day of the week based on the culture associated with the current DateTimeFormatInfo object.

GetAbbreviatedEraName(Int32) GetAbbreviatedEraName(Int32) GetAbbreviatedEraName(Int32) GetAbbreviatedEraName(Int32)

Возвращает строку, содержащую сокращенное название указанной эры, если такое сокращение существует.Returns the string containing the abbreviated name of the specified era, if an abbreviation exists.

GetAbbreviatedMonthName(Int32) GetAbbreviatedMonthName(Int32) GetAbbreviatedMonthName(Int32) GetAbbreviatedMonthName(Int32)

Возвращает сокращение указанного месяца, принятое в определенном языке и региональных параметрах, связанных с текущим объектом DateTimeFormatInfo.Returns the culture-specific abbreviated name of the specified month based on the culture associated with the current DateTimeFormatInfo object.

GetAllDateTimePatterns() GetAllDateTimePatterns() GetAllDateTimePatterns() GetAllDateTimePatterns()

Возвращает все стандартные шаблоны, в которых можно форматировать значения даты и времени.Returns all the standard patterns in which date and time values can be formatted.

GetAllDateTimePatterns(Char) GetAllDateTimePatterns(Char) GetAllDateTimePatterns(Char) GetAllDateTimePatterns(Char)

Возвращает все шаблоны, в которых значения даты и времени можно форматировать с использованием заданной стандартной строки формата.Returns all the patterns in which date and time values can be formatted using the specified standard format string.

GetDayName(DayOfWeek) GetDayName(DayOfWeek) GetDayName(DayOfWeek) GetDayName(DayOfWeek)

Возвращает сокращение указанного дня недели, принятое в определенном языке и региональных параметрах, связанных с текущим объектом DateTimeFormatInfo.Returns the culture-specific full name of the specified day of the week based on the culture associated with the current DateTimeFormatInfo object.

GetEra(String) GetEra(String) GetEra(String) GetEra(String)

Возвращает целое число, представляющее собой указанную эру.Returns the integer representing the specified era.

GetEraName(Int32) GetEraName(Int32) GetEraName(Int32) GetEraName(Int32)

Возвращает строку, содержащую название указанной эры.Returns the string containing the name of the specified era.

GetFormat(Type) GetFormat(Type) GetFormat(Type) GetFormat(Type)

Возвращает объект указанного типа, предоставляющий службу форматирования времени и даты.Returns an object of the specified type that provides a date and time formatting service.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetInstance(IFormatProvider) GetInstance(IFormatProvider) GetInstance(IFormatProvider) GetInstance(IFormatProvider)

Возвращает объект DateTimeFormatInfo, связанный с указанным IFormatProvider.Returns the DateTimeFormatInfo object associated with the specified IFormatProvider.

GetMonthName(Int32) GetMonthName(Int32) GetMonthName(Int32) GetMonthName(Int32)

Возвращает полное имя указанного месяца, принятое в определенном языке и региональных параметрах, связанных с текущим объектом DateTimeFormatInfo.Returns the culture-specific full name of the specified month based on the culture associated with the current DateTimeFormatInfo object.

GetShortestDayName(DayOfWeek) GetShortestDayName(DayOfWeek) GetShortestDayName(DayOfWeek) GetShortestDayName(DayOfWeek)

Получает самое короткое сокращенное название дня для определенного дня недели, связанное с текущим объектом DateTimeFormatInfo.Obtains the shortest abbreviated day name for a specified day of the week associated with the current DateTimeFormatInfo object.

GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ReadOnly(DateTimeFormatInfo) ReadOnly(DateTimeFormatInfo) ReadOnly(DateTimeFormatInfo) ReadOnly(DateTimeFormatInfo)

Возвращает программу-оболочку DateTimeFormatInfo, доступную только для чтения.Returns a read-only DateTimeFormatInfo wrapper.

SetAllDateTimePatterns(String[], Char) SetAllDateTimePatterns(String[], Char) SetAllDateTimePatterns(String[], Char) SetAllDateTimePatterns(String[], Char)

Задает строки пользовательского формата даты и времени, соответствующие заданной стандартной строке формата.Sets the custom date and time format strings that correspond to a specified standard format string.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Явные реализации интерфейса

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Применяется к

Дополнительно