DateTimeFormatInfo Classe

Definizione

Fornisce informazioni specifiche delle impostazioni cultura relative al formato dei valori di data e ora.

public ref class DateTimeFormatInfo sealed : IFormatProvider
public ref class DateTimeFormatInfo sealed : ICloneable, IFormatProvider
public ref class DateTimeFormatInfo sealed : ICloneable, IFormatProvider, System::Runtime::Serialization::ISerializable
public sealed class DateTimeFormatInfo : IFormatProvider
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
[System.Serializable]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
type DateTimeFormatInfo = class
    interface IFormatProvider
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
    interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements ICloneable, IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements ICloneable, IFormatProvider, ISerializable
Ereditarietà
DateTimeFormatInfo
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene utilizzata la reflection per ottenere le proprietà dell'oggetto per le impostazioni cultura DateTimeFormatInfo inglese (Stati Uniti). Visualizza il valore delle proprietà che contengono stringhe di formato personalizzate e le usa per visualizzare le date formattate.

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

Commenti

Le proprietà della classe contengono informazioni specifiche delle impostazioni cultura per la formattazione o l'analisi dei valori di DateTimeFormatInfo data e ora, ad esempio:

  • Modelli usati per formattare i valori di data.

  • Modelli usati per formattare i valori di ora.

  • Nomi dei giorni della settimana.

  • Nomi dei mesi dell'anno.

  • L'A.M. sia quello designatori usati nei valori di tempo.

  • Calendario in cui vengono espresse le date.

Contenuto della sezione:

Creazione di un'istanza di un oggetto DateTimeFormatInfo

Un oggetto può rappresentare le convenzioni di formattazione delle impostazioni cultura invarianti, impostazioni cultura specifiche, impostazioni cultura DateTimeFormatInfo neutre o impostazioni cultura correnti. Questa sezione illustra come creare un'istanza di ogni tipo di DateTimeFormatInfo oggetto.

Creazione di un'istanza di un oggetto DateTimeFormatInfo per le impostazioni cultura invarianti

Le impostazioni cultura invarianti rappresentano impostazioni cultura indipendenti dalle impostazioni cultura. Si basa sulla lingua inglese, ma non su un paese o un'area geografica specifica di lingua inglese. Anche se i dati di impostazioni cultura specifiche possono essere dinamici e possono cambiare per riflettere nuove convenzioni culturali o preferenze dell'utente, i dati delle impostazioni cultura invarianti non cambiano. È possibile creare un'istanza di un oggetto che rappresenta le convenzioni di formattazione delle impostazioni cultura DateTimeFormatInfo invarianti nei modi seguenti:

Nell'esempio seguente viene utilizzato ognuno di questi metodi per creare un'istanza di un oggetto che rappresenta le impostazioni cultura DateTimeFormatInfo invarianti. Indica quindi se l'oggetto è di sola lettura.

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

Creazione di un'istanza di un oggetto DateTimeFormatInfo per impostazioni cultura specifiche

Impostazioni cultura specifiche rappresentano una lingua parlata in un determinato paese/area geografica. En-US, ad esempio, è una lingua specifica che rappresenta la lingua inglese parlata nel Stati Uniti e en-CA è una lingua specifica che rappresenta la lingua inglese parlata in Canada. È possibile creare un'istanza di un oggetto che DateTimeFormatInfo rappresenta le convenzioni di formattazione di impostazioni cultura specifiche nei modi seguenti:

L'esempio seguente illustra ognuno di questi modi per creare un'istanza di un oggetto e DateTimeFormatInfo indica se l'oggetto risultante è di sola lettura.

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

Creazione di un'istanza di un oggetto DateTimeFormatInfo per impostazioni cultura non indipendenti

Le impostazioni cultura neutre rappresentano impostazioni cultura o lingua indipendenti da un paese o da un'area geografica. è in genere l'elemento padre di una o più impostazioni cultura specifiche. Ad esempio, Fr è una lingua neutra per la lingua francese e l'elemento padre delle impostazioni cultura fr-FR. È possibile creare un'istanza di un oggetto che rappresenta le convenzioni di formattazione di impostazioni cultura neutre nello stesso modo in cui si crea un oggetto che rappresenta le convenzioni di formattazione DateTimeFormatInfo DateTimeFormatInfo di impostazioni cultura specifiche. È anche possibile recuperare l'oggetto di impostazioni cultura neutre recuperando impostazioni cultura neutre dalla proprietà di impostazioni cultura specifiche e recuperando l'oggetto restituito DateTimeFormatInfo dalla relativa proprietà CultureInfo.Parent DateTimeFormatInfo CultureInfo.DateTimeFormat . A meno che le impostazioni cultura padre non rappresentino le impostazioni cultura invarianti, l'oggetto DateTimeFormatInfo restituito è di lettura/scrittura. L'esempio seguente illustra questi modi per creare un'istanza di un DateTimeFormatInfo oggetto che rappresenta impostazioni cultura neutre.

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

Nota

Nelle versioni .NET Framework da 1.0 a .NET Framework 3.5, il tentativo di recuperare un oggetto che riflette le convenzioni di formattazione di impostazioni cultura non indipendenti genera DateTimeFormatInfo NotSupportedException un'eccezione.

Tuttavia, le impostazioni cultura neutre non dispongono di informazioni di formattazione specifiche delle impostazioni cultura, perché sono indipendenti da un paese o un'area geografica specifica. Anziché popolare l'oggetto con valori generici, il .NET Framework restituisce un oggetto che riflette le convenzioni di formattazione di impostazioni cultura specifiche figlio delle impostazioni cultura DateTimeFormatInfo DateTimeFormatInfo non associate. Ad esempio, l'oggetto per le impostazioni cultura en neutre riflette le convenzioni di formattazione delle impostazioni cultura en-US e l'oggetto per le impostazioni cultura fr riflette le convenzioni di formattazione delle impostazioni cultura DateTimeFormatInfo DateTimeFormatInfo fr-FR.

È possibile usare codice simile al seguente per determinare le convenzioni di formattazione di impostazioni cultura specifiche rappresentate da impostazioni cultura non indipendenti. Nell'esempio viene utilizzata la reflection per DateTimeFormatInfo confrontare le proprietà di impostazioni cultura neutre con le proprietà di impostazioni cultura figlio specifiche. Considera due calendari equivalenti se sono dello stesso tipo di calendario e, per i calendari gregoriani, se le relative proprietà GregorianCalendar.CalendarType hanno valori identici.

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.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

Creazione di un'istanza di un oggetto DateTimeFormatInfo per le impostazioni cultura correnti

È possibile creare un'istanza di un oggetto che rappresenta le convenzioni di DateTimeFormatInfo formattazione delle impostazioni cultura correnti nei modi seguenti:

Nell'esempio seguente viene utilizzato ognuno di questi metodi per creare un'istanza di un DateTimeFormatInfo oggetto che rappresenta le convenzioni di formattazione delle impostazioni cultura correnti. Indica quindi se l'oggetto è di sola lettura.

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

È possibile creare un oggetto DateTimeFormatInfo scrivibile che rappresenta le convenzioni delle impostazioni cultura correnti in uno dei modi seguenti:

Nell'esempio seguente viene illustrata ogni modalità di creazione di un'istanza di un oggetto di lettura/scrittura DateTimeFormatInfo e viene visualizzato il valore della relativa proprietà IsReadOnly .

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

In Windows, l'utente può eseguire l'override di alcuni dei valori di proprietà usati nelle operazioni di formattazione e analisi tramite l'applicazione Area e lingua DateTimeFormatInfo in Pannello di controllo. Ad esempio, un utente le cui impostazioni cultura sono inglese (Stati Uniti) potrebbe scegliere di visualizzare valori di ora lunghi usando un orologio a 24 ore (nel formato HH:mm:ss) anziché l'orologio predefinito a 12 ore (nel formato h:mm:ss tt). Gli DateTimeFormatInfo oggetti recuperati nei modi descritti in precedenza riflettono tutti questi override utente. Se questa operazione non è desiderabile, è possibile creare un oggetto che non rifletta le sostituzioni utente (ed è anche di lettura/scrittura anziché di sola lettura) chiamando il costruttore e fornendo un valore per NumberFormatInfo CultureInfo.CultureInfo(String, Boolean) false l'argomento useUserOverride . L'esempio seguente illustra questo comportamento per un sistema le cui impostazioni cultura correnti sono inglese (Stati Uniti) e il cui modello temporale lungo è stato modificato dall'impostazione predefinita h:mm:ss tt a 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 e dati dinamici

I dati specifici delle impostazioni cultura per la formattazione dei valori di data e ora forniti dalla classe sono dinamici, proprio come i dati culturali DateTimeFormatInfo forniti dalla CultureInfo classe . Non è consigliabile fare ipotesi sulla stabilità dei valori per DateTimeFormatInfo gli oggetti associati a oggetti CultureInfo specifici. Solo i dati forniti dalle impostazioni cultura invarianti e dall'oggetto DateTimeFormatInfo associato sono stabili. Altri dati possono cambiare tra le sessioni dell'applicazione o anche durante l'esecuzione dell'applicazione. Esistono quattro principali origini di modifica:

  • Aggiornamenti di sistema. Le preferenze culturali, ad esempio il calendario preferito o i formati di data e ora personalizzati, cambiano nel tempo. In questo caso, Windows update include modifiche al valore DateTimeFormatInfo della proprietà per impostazioni cultura specifiche.

  • Impostazioni cultura di sostituzione. La CultureAndRegionInfoBuilder classe può essere utilizzata per sostituire i dati di impostazioni cultura esistenti.

  • Modifiche a catena ai valori delle proprietà. In fase di esecuzione è possibile modificare una serie di proprietà correlate alle impostazioni cultura che, a loro volta, causano DateTimeFormatInfo la modifica dei dati. Ad esempio, le impostazioni cultura correnti possono essere modificate a livello di codice o tramite l'azione dell'utente. In questo caso, DateTimeFormatInfo l'oggetto restituito dalla CurrentInfo proprietà cambia in un oggetto associato alle impostazioni cultura correnti. Analogamente, il calendario delle impostazioni cultura può cambiare e ciò può comportare modifiche a numerosi DateTimeFormatInfo valori di proprietà.

  • Preferenze dell'utente. Gli utenti dell'applicazione possono scegliere di eseguire l'override di alcuni dei valori associati alle impostazioni cultura di sistema correnti tramite le opzioni internazionali e della lingua in Pannello di controllo. Ad esempio, gli utenti possono scegliere di visualizzare la data in un formato diverso. Se la CultureInfo.UseUserOverride proprietà è impostata su true , anche le proprietà DateTimeFormatInfo dell'oggetto vengono recuperate dalle impostazioni utente. Se le impostazioni utente non sono compatibili con le impostazioni cultura associate all'oggetto , ad esempio se il calendario selezionato non è uno dei calendari indicati dalla proprietà , i risultati dei metodi e dei valori delle proprietà non CultureInfo OptionalCalendars sono definiti.

Per ridurre al minimo la possibilità di dati incoerenti, tutte le proprietà sottoponibili a override dell'utente di un oggetto vengono DateTimeFormatInfo inizializzate al momento della creazione dell'oggetto. Esiste ancora una possibilità di incoerenza, perché né la creazione di oggetti né il processo di override dell'utente sono atomici e i valori rilevanti possono cambiare durante la creazione dell'oggetto. Tuttavia, questa situazione dovrebbe essere estremamente rara.

È possibile controllare se le sostituzioni utente vengono riflesse negli oggetti DateTimeFormatInfo che rappresentano le stesse impostazioni cultura delle impostazioni cultura di sistema. Nella tabella seguente sono elencati i modi in cui è possibile recuperare un oggetto e viene indicato se l'oggetto risultante riflette le DateTimeFormatInfo sostituzioni dell'utente.

Origine dell'oggetto CultureInfo e DateTimeFormatInfo Riflette le sostituzioni utente
ProprietàCultureInfo.CurrentCulture.DateTimeFormat
ProprietàDateTimeFormatInfo.CurrentInfo
Metodo CultureInfo.CreateSpecificCulture
Metodo CultureInfo.GetCultureInfo No
Costruttore CultureInfo.CultureInfo(String)
Costruttore CultureInfo.CultureInfo(String, Boolean) Dipende dal valore del useUserOverride parametro

A meno che non vi sia un motivo valido per eseguire diversamente, è necessario rispettare le sostituzioni utente quando si usa l'oggetto nelle applicazioni client per formattare e analizzare l'input dell'utente o DateTimeFormatInfo per visualizzare i dati. Per le applicazioni server o le applicazioni automatica, non è consigliabile. Tuttavia, se si usa l'oggetto in modo esplicito o implicito per rendere persistenti i dati di data e ora in formato stringa, è necessario usare un oggetto che rifletta le convenzioni di formattazione delle impostazioni cultura DateTimeFormatInfo invarianti oppure è necessario specificare una stringa di formato di data e ora personalizzata da usare indipendentemente dalle impostazioni DateTimeFormatInfo cultura.

Formattazione di date e ore

Un DateTimeFormatInfo oggetto viene utilizzato in modo implicito o esplicito in tutte le operazioni di formattazione di data e ora. Sono incluse le chiamate ai metodi seguenti:

Tutte le operazioni di formattazione di data e ora usano IFormatProvider un'implementazione . IFormatProviderL'interfaccia include un singolo metodo, IFormatProvider.GetFormat(Type) . A questo metodo di callback viene passato Type un oggetto che rappresenta il tipo necessario per fornire informazioni di formattazione. Il metodo restituisce un'istanza di quel tipo o se non è in grado di null fornire un'istanza del tipo. Il .NET Framework include due IFormatProvider implementazioni per la formattazione di date e ore:

Se un'implementazione non viene fornita in modo esplicito a un metodo di formattazione, viene utilizzato l'oggetto restituito dalla proprietà che rappresenta IFormatProvider CultureInfo le impostazioni cultura CultureInfo.CurrentCulture correnti.

Nell'esempio seguente viene illustrata la relazione tra IFormatProvider l'interfaccia e la classe nelle operazioni di DateTimeFormatInfo formattazione. Definisce un'implementazione IFormatProvider personalizzata il cui metodo visualizza il tipo GetFormat dell'oggetto richiesto dall'operazione di formattazione. Se richiede un oggetto , il DateTimeFormatInfo metodo fornisce DateTimeFormatInfo l'oggetto per le impostazioni cultura correnti. Come illustrato nell'output dell'esempio, il metodo richiede a un oggetto di fornire informazioni di formattazione, mentre il metodo richiede oggetti e Decimal.ToString(IFormatProvider) DateTimeFormatInfo String.Format(IFormatProvider, String, Object[]) NumberFormatInfo DateTimeFormatInfo ICustomFormatter un'implementazione.

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, 13, 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

Stringhe di formato e proprietà DateTimeFormatInfo

L'oggetto include tre tipi di proprietà utilizzate nelle operazioni di DateTimeFormatInfo formattazione con valori di data e ora:

Le stringhe di formato di data e ora standard,ad esempio "d", "D", "f" e "F", sono alias che corrispondono a particolari proprietà del modello DateTimeFormatInfo di formato. La maggior parte delle stringhe di formato di data e ora personalizzate è correlata a stringhe o sottostringhe inserite da un'operazione di formattazione nel flusso di risultati. Nella tabella seguente sono elencati gli identificatori di formato di data e ora standard e personalizzati e le relative proprietà DateTimeFormatInfo associate. Per informazioni dettagliate su come usare questi identificatori di formato, vedere Stringhe di formato di data e ora standard e Stringhe di formato di data e ora personalizzate. Si noti che ogni stringa di formato standard corrisponde a una DateTimeFormatInfo proprietà il cui valore è una stringa di formato di data e ora personalizzata. I singoli identificatori in questa stringa di formato personalizzata corrispondono a loro volta ad altre DateTimeFormatInfo proprietà. La tabella elenca solo le proprietà per le quali le stringhe di formato standard sono alias e non elenca le proprietà a cui possono accedere le stringhe di formato personalizzate assegnate a tali proprietà DateTimeFormatInfo con alias. Inoltre, la tabella elenca solo gli identificatori di formato personalizzati che corrispondono alle DateTimeFormatInfo proprietà.

Identificatore di formato Proprietà associate
"d" (data breve; stringa di formato standard) ShortDatePatternper definire il formato complessivo della stringa di risultato.
"D" (data lunga; stringa di formato standard) LongDatePatternper definire il formato complessivo della stringa di risultato.
"f" (data/ora breve completa; stringa di formato standard) LongDatePatternper definire il formato del componente data della stringa di risultato.

ShortTimePatternper definire il formato del componente ora della stringa di risultato.
"F" (data completa/ora lunga; stringa di formato standard) LongDatePatternper definire il formato del componente data della stringa di risultato.

LongTimePatternper definire il formato del componente ora della stringa di risultato.
"g" (data/ora breve generale; stringa di formato standard) ShortDatePatternper definire il formato del componente data della stringa di risultato.

ShortTimePatternper definire il formato del componente ora della stringa di risultato.
"G" (data/ora lunga generale; stringa di formato standard) ShortDatePatternper definire il formato del componente data della stringa di risultato.

LongTimePatternper definire il formato del componente ora della stringa di risultato.
"M", "m" (mese/giorno; stringa di formato standard) MonthDayPatternper definire il formato complessivo della stringa di risultato.
"O", "o" (data/ora round trip; stringa di formato standard) No.
"R", "r" (RFC1123; stringa di formato standard) RFC1123Patternper definire una stringa di risultato conforme allo standard RFC 1123. la proprietà è di sola lettura.
"s" (data/ora ordinabile; stringa di formato standard) SortableDateTimePattern, per definire una stringa di risultato conforme allo standard ISO 8601. la proprietà è di sola lettura.
"t" (ora breve; stringa di formato standard) ShortTimePatternper definire il formato complessivo della stringa di risultato.
"T" (ora lunga; stringa di formato standard) LongTimePatternper definire il formato complessivo della stringa di risultato.
"u" (data/ora ordinabile universale; stringa di formato standard) UniversalSortableDateTimePattern, per definire una stringa di risultato conforme allo standard ISO 8601 per l'ora universale coordinata. la proprietà è di sola lettura.
"U" (data/ora completa universale; stringa di formato standard) FullDateTimePattern, per definire il formato complessivo della stringa di risultato.
"Y", "y" (mese dell'anno; stringa di formato standard) YearMonthPattern, per definire il formato complessivo della stringa di risultato.
"ddd" (identificatore di formato personalizzato) AbbreviatedDayNames, per includere il nome abbreviato del giorno della settimana nella stringa di risultato.
"g", "gg" (identificatore di formato personalizzato) Chiama il GetEraName metodo per inserire il nome dell'era nella stringa di risultato.
"MMM" (identificatore di formato personalizzato) AbbreviatedMonthNames, per includere il nome abbreviato del mese nella stringa di risultato.
"MMMM" (identificatore di formato personalizzato) MonthNames o MonthGenitiveNames per includere il nome completo del mese nella stringa di risultato.
"t" (identificatore di formato personalizzato) AMDesignator o PMDesignator per includere il primo carattere dell'designatore AM/PM nella stringa di risultato.
"tt" (identificatore di formato personalizzato) AMDesignator o PMDesignator per includere l'intero designatore AM/PM nella stringa di risultato.
":" (identificatore di formato personalizzato) TimeSeparator, per includere il separatore dell'ora nella stringa di risultato.
"/" (identificatore di formato personalizzato) DateSeparator, per includere il separatore della data nella stringa di risultato.

Modifica delle proprietà DateTimeFormatInfo

È possibile modificare la stringa di risultato prodotta dalle stringhe di formato di data e ora modificando le proprietà associate di un oggetto DateTimeFormatInfo scrivibile. Per determinare se DateTimeFormatInfo un oggetto è scrivibile, usare la IsReadOnly proprietà . Per personalizzare un DateTimeFormatInfo oggetto in questo modo:

  1. Creare una copia di lettura/scrittura di un oggetto di cui si desidera modificare DateTimeFormatInfo le convenzioni di formattazione. Vedere la sezione Creazione di un'istanza di un oggetto DateTimeFormatInfo.

  2. Modificare la proprietà o le proprietà utilizzate per produrre la stringa di risultato desiderata. Per informazioni su come i metodi di formattazione usano le proprietà per definire le stringhe di risultato, vedere la sezione precedente Stringhe di formato e proprietà DateTimeFormatInfo DateTimeFormatInfo.

  3. Usare DateTimeFormatInfo l'oggetto personalizzato creato come argomento nelle chiamate ai metodi di IFormatProvider formattazione.

Esistono altri due modi per modificare il formato di una stringa di risultato:

  • È possibile usare la classe per definire impostazioni cultura personalizzate (impostazioni cultura con un nome univoco e che integrano le impostazioni cultura esistenti) o impostazioni cultura sostitutive (usate al posto di impostazioni cultura CultureAndRegionInfoBuilder specifiche). È possibile salvare e accedere a queste impostazioni cultura a livello di codice come qualsiasi oggetto CultureInfo supportato dal .NET Framework.

  • Se la stringa di risultato non è sensibile alle impostazioni cultura e non segue un formato predefinito, è possibile usare una stringa di formato di data e ora personalizzato. Ad esempio, se si serializzano dati di data e ora nel formato AAAAMMMMDHHmmss, è possibile generare la stringa di risultato passando la stringa di formato personalizzata al metodo ed è possibile convertire nuovamente la stringa di risultato in un valore DateTime.ToString(String) DateTime chiamando il metodo DateTime.ParseExact .

Modifica del modello di data breve

Nell'esempio seguente viene modificato il formato di una stringa di risultato prodotta dalla stringa di formato standard "d" (data breve). Modifica la proprietà associata per le impostazioni cultura en-US o english (Stati Uniti) dal valore predefinito ShortDatePattern "M/d/yyyy" a "yyyy'-"MM"-"dd" e usa la stringa di formato standard "d" per visualizzare la data prima e dopo la modifica ShortDatePattern della proprietà.

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

Modifica del carattere separatore di data

Nell'esempio seguente viene modificato il carattere separatore di data in un DateTimeFormatInfo oggetto che rappresenta le convenzioni di formattazione delle impostazioni cultura fr-FR. Nell'esempio viene utilizzata la stringa di formato standard "g" per visualizzare la data prima e dopo la DateSeparator modifica della proprietà .

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: 28/08/2013 00:00
//       After modifying the DateSeparator property: 28-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

Modifica delle abbreviazioni dei nomi dei giorni e del modello di data lunga

In alcuni casi, il modello di data lunga, che in genere visualizza il nome completo del giorno e del mese insieme al numero del giorno del mese e dell'anno, potrebbe essere troppo lungo. Nell'esempio seguente viene abbreviato il modello di data lungo per le impostazioni cultura en-US per restituire un'abbreviazione del nome di giorno di uno o due caratteri seguita dal numero del giorno, dall'abbreviazione del nome del mese e dall'anno. A tale scopo, assegna abbreviazioni del nome di giorno più brevi alla matrice e modificando la stringa di AbbreviatedDayNames formato personalizzata assegnata alla proprietà LongDatePattern . Ciò influisce sulle stringhe di risultato restituite dalle stringhe di formato standard "D" e "f".

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 9, 2013
//       F: Tuesday, July 9, 2013 12:00:00 AM
//       f: Tuesday, July 9, 2013 12:00 AM
//
//       D: Tu 09-Jul-2013
//       F: Tuesday, July 9, 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 9, 2013
'       F: Tuesday, July 9, 2013 12:00:00 AM
'       f: Tuesday, July 9, 2013 12:00 AM
'
'       D: Tu 09-Jul-2013
'       F: Tuesday, July 9, 2013 12:00:00 AM
'       f: Tu 09-Jul-2013 12:00 AM

In genere, la modifica alla proprietà influisce anche sulla proprietà , che a sua volta definisce la stringa di risultato restituita dalla stringa LongDatePattern FullDateTimePattern di formato standard "F". Per mantenere il modello di data e ora completo originale, nell'esempio viene riassegnare la stringa di formato personalizzato originale assegnata alla proprietà dopo la FullDateTimePattern LongDatePattern modifica della proprietà .

Passaggio da un orologio a 12 ore a un orologio a 24 ore

Per molte impostazioni cultura nel .NET Framework, l'ora viene espressa usando un orologio di 12 ore e un designatore AM/PM. Nell'esempio seguente viene definito un metodo che sostituisce qualsiasi formato di ora che utilizza un formato a 12 ore con un formato che usa un formato ReplaceWith24HourClock a 24 ore.

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

Nell'esempio viene utilizzata un'espressione regolare per modificare la stringa di formato. Il criterio di espressione @"^(?<openAMPM>\s*t+\s*)? (?(openAMPM) h+(?<nonHours>[^ht]+)$ | \s*h+(?<nonHours>[^ht]+)\s*t+) regolare è definito come segue:

Modello Descrizione
^ Inizia la ricerca della corrispondenza all'inizio della stringa.
(?<openAMPM>\s*t+\s*)? Trova la corrispondenza con zero o una occorrenza di zero o più spazi vuoti, seguiti dalla lettera "t" una o più volte, seguita da zero o più spazi vuoti. Questo gruppo di acquisizione è denominato openAMPM .
(?(openAMPM) h+(?<nonHours>[^ht]+)$ Se il gruppo ha una corrispondenza, trovare la corrispondenza con la lettera "h" una o più volte, seguita da uno o più caratteri che non sono openAMPM "h" né "t". La corrispondenza termina alla fine della stringa. Tutti i caratteri acquisiti dopo "h" vengono inclusi in un gruppo di acquisizione denominato nonHours .
&#124; \s*h+(?<nonHours>[^ht]+)\s*t+) Se il gruppo non ha una corrispondenza, trovare la corrispondenza con la lettera "h" una o più volte, seguita da uno o più caratteri che non sono né "h" né "t", seguiti da zero o più spazi openAMPM vuoti. Trovare infine una o più occorrenze della lettera "t". Tutti i caratteri acquisiti dopo "h" e prima degli spazi vuoti e "t" vengono inclusi in un gruppo di acquisizione denominato nonHours .

Il gruppo di acquisizione contiene il minuto ed eventualmente il secondo componente di una stringa di formato di data e ora nonHours personalizzato, insieme a qualsiasi simbolo separatore dell'ora. Il criterio di HH${nonHours} sostituzione antepone la sottostringa "HH" a questi elementi.

Visualizzazione e modifica dell'era in una data

Nell'esempio seguente viene aggiunto l'identificatore di formato personalizzato "g" alla proprietà di un oggetto che rappresenta le convenzioni di formattazione LongDatePattern delle impostazioni cultura en-US. Questa aggiunta influisce sulle tre stringhe di formato standard seguenti:

  • Stringa di formato standard "D" (data lunga), mappata direttamente alla LongDatePattern proprietà .

  • Stringa di formato standard "f" (data completa/ora breve), che produce una stringa di risultato che concatena le sottostringhe prodotte dalle LongDatePattern proprietà ShortTimePattern e .

  • Stringa di formato standard "F" (data completa/ora lunga), mappata direttamente alla FullDateTimePattern proprietà . Poiché questo valore della proprietà non è stato impostato in modo esplicito, viene generato dinamicamente concatenando le LongDatePattern proprietà LongTimePattern e .

L'esempio mostra anche come modificare il nome dell'era per le impostazioni cultura il cui calendario ha una sola era. In questo caso, le impostazioni cultura en-US utilizzano il calendario gregoriano, rappresentato da un GregorianCalendar oggetto . La GregorianCalendar classe supporta una singola era, che denomi A.D. (Anno Domini). Nell'esempio il nome dell'era viene modificato in C.E. (Era comune) sostituendo l'identificatore di formato personalizzato "g" nella stringa di formato assegnata alla FullDateTimePattern proprietà con una stringa letterale. L'uso di una stringa letterale è necessario perché il nome dell'era viene in genere restituito dal metodo dai dati privati nelle tabelle delle impostazioni cultura fornite dal sistema operativo .NET Framework o GetEraName Windows.

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

Analisi di stringhe di data e ora

L'analisi comporta la conversione della rappresentazione di stringa di una data e di un'ora in un DateTime valore DateTimeOffset o . Entrambi questi tipi includono i Parse metodi , , e per TryParse ParseExact TryParseExact supportare le operazioni di analisi. I metodi e convertono una stringa che può avere un'ampia gamma di formati, mentre e richiedono che la stringa Parse abbia uno o più formati TryParse ParseExact TryParseExact definiti. Se l'operazione di analisi non riesce Parse e ParseExact genera un'eccezione, mentre TryParse e TryParseExact restituiscono false .

I metodi di analisi usano in modo implicito o esplicito un valore di enumerazione per determinare quali elementi di stile(ad esempio, uno spazio iniziale, finale o interno) possono essere presenti nella stringa da analizzare e come interpretare la stringa analizzata o eventuali elementi DateTimeStyles mancanti. Se non si specifica un valore quando si chiama il metodo o , il valore predefinito è , ovvero uno stile composito che include i flag DateTimeStyles Parse , e TryParse DateTimeStyles.AllowWhiteSpaces DateTimeStyles.AllowLeadingWhite DateTimeStyles.AllowTrailingWhite DateTimeStyles.AllowInnerWhite . Per i metodi e , il valore predefinito è . La stringa di input deve corrispondere esattamente ParseExact a una determinata stringa di formato di data e ora TryParseExact DateTimeStyles.None personalizzato.

I metodi di analisi usano anche in modo implicito o esplicito un oggetto che definisce i simboli e i modelli specifici che possono verificarsi nella DateTimeFormatInfo stringa da analizzare. Se non si specifica un oggetto , per impostazione predefinita viene usato l'oggetto per DateTimeFormatInfo DateTimeFormatInfo le impostazioni cultura correnti. Per altre informazioni sull'analisi delle stringhe di data e ora, vedere i singoli metodi di analisi, ad esempio DateTime.Parse DateTime.TryParse , , e DateTimeOffset.ParseExact DateTimeOffset.TryParseExact .

Nell'esempio seguente viene illustrata la natura con distinzione delle impostazioni cultura dell'analisi delle stringhe di data e ora. Tenta di analizzare due stringhe di data usando le convenzioni delle impostazioni cultura en-US, en-GB, fr-FR e fi-FI. La data interpretata come 18/8/2014 nelle impostazioni cultura en-US genera un'eccezione nelle altre tre impostazioni cultura perché 18 viene interpretato come numero del FormatException mese. 02/01/2015 viene analizzato come secondo giorno del primo mese nelle impostazioni cultura en-US, ma come primo giorno del secondo mese nelle impostazioni cultura rimanenti.

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

Le stringhe di data e ora vengono in genere analizzate per due motivi:

  • Per convertire l'input dell'utente in un valore di data e ora.

  • Per eseguire il round trip di un valore di data e ora; per deserializzare un valore di data e ora serializzato in precedenza come stringa.

Le sezioni seguenti illustrano queste due operazioni in modo più dettagliato.

Analisi delle stringhe utente

Quando si analizzano le stringhe di data e ora immesse dall'utente, è sempre necessario creare un'istanza di un oggetto che rifletta le impostazioni cultura dell'utente, incluse eventuali personalizzazioni apportate DateTimeFormatInfo dall'utente. In caso contrario, l'oggetto data e ora potrebbe avere valori non corretti. Per informazioni su come creare un'istanza di un oggetto che riflette le personalizzazioni culturali dell'utente, DateTimeFormatInfo vedere la sezione DateTimeFormatInfo e dynamic data.

Nell'esempio seguente viene illustrata la differenza tra un'operazione di analisi che riflette le impostazioni cultura dell'utente e una che non lo fa. In questo caso, le impostazioni cultura di sistema predefinite sono en-US, ma l'utente ha usato Pannello di controllo, Area e Lingua per modificare il modello di data breve dal valore predefinito "M/d/aa" a "aa/MM/gg". Quando l'utente immette una stringa che riflette le impostazioni utente e la stringa viene analizzata da un oggetto che riflette anche le impostazioni utente (sostituzioni), l'operazione di analisi restituisce un DateTimeFormatInfo risultato corretto. Tuttavia, quando la stringa viene analizzata da un oggetto che riflette le impostazioni cultura en-US standard, il metodo di analisi genera un'eccezione perché interpreta 14 come numero del mese, non le ultime due cifre DateTimeFormatInfo FormatException dell'anno.

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

Serializzazione e deserializzazione di dati di data e ora

Si prevede che i dati di data e ora serializzati eserendano il round trip. ciò significa che tutti i valori serializzati e deserializzati devono essere identici. Se un valore di data e ora rappresenta un singolo momento, il valore deserializzato deve rappresentare lo stesso momento indipendentemente dalle impostazioni cultura o dal fuso orario del sistema in cui è stato ripristinato. Per eseguire correttamente il round trip dei dati relativi a data e ora, è necessario usare le convenzioni delle impostazioni cultura invarianti, restituite dalla proprietà , per generare e analizzare InvariantInfo i dati. Le operazioni di formattazione e analisi non devono mai riflettere le convenzioni delle impostazioni cultura predefinite. Se si usano impostazioni cultura predefinite, la portabilità dei dati è rigorosamente limitata. può essere deserializzato correttamente solo in un thread le cui impostazioni specifiche della lingua sono identiche a quelle del thread in cui è stato serializzato. In alcuni casi, ciò significa che i dati non possono essere serializzati e deserializzati correttamente nello stesso sistema.

Se il componente relativo all'ora di un valore di data e ora è significativo, deve essere convertito anche in formato UTC e serializzato usando la stringa di formato standard "o" o "r". I dati relativi all'ora possono quindi essere ripristinati chiamando un metodo di analisi e passando la stringa di formato appropriata insieme alle impostazioni cultura invarianti come provider argomento.

Nell'esempio seguente viene illustrato il processo di round trip di un valore di data e ora. Serializza una data e un'ora in un sistema che osserva l'ora del Pacifico degli Stati Uniti e le cui impostazioni cultura correnti sono 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)

Deserializza i dati in un sistema nel fuso orario Disa, Città del Paese e Parigi e le cui impostazioni cultura correnti sono fr-FR. La data ripristinata è di nove ore successiva alla data originale, che riflette la regolazione del fuso orario da otto ore indietro rispetto all'ora UTC a un'ora prima dell'ora UTC. Sia la data originale che la data ripristinata rappresentano lo stesso momento nel tempo.

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

Costruttori

DateTimeFormatInfo()

Inizializza una nuova istanza scrivibile della classe DateTimeFormatInfo che è indipendente dalle impostazioni cultura (invariante).

Proprietà

AbbreviatedDayNames

Ottiene o imposta una matrice unidimensionale di tipo String contenente i nomi abbreviati dei giorni della settimana specifici delle impostazioni cultura.

AbbreviatedMonthGenitiveNames

Ottiene o imposta una matrice di stringhe di nomi abbreviati dei mesi associati all'oggetto DateTimeFormatInfo corrente.

AbbreviatedMonthNames

Ottiene o imposta una matrice di stringhe unidimensionale contenente i nomi abbreviati dei mesi specifici delle impostazioni cultura.

AMDesignator

Ottiene o imposta l'indicatore di stringa per le ore "ante meridiem" (prima di mezzogiorno).

Calendar

Ottiene o imposta il calendario da usare per le impostazioni cultura correnti.

CalendarWeekRule

Ottiene o imposta un valore che specifica la regola usata per determinare la prima settimana di calendario dell'anno.

CurrentInfo

Ottiene un oggetto DateTimeFormatInfo di sola lettura che formatta i valori in base alle impostazioni cultura correnti.

DateSeparator

Ottiene o imposta la stringa che separa i componenti di una data, ovvero l'anno, il mese e il giorno.

DayNames

Ottiene o imposta una matrice di stringa unidimensionale contenente i nomi estesi dei giorni della settimana specifici delle impostazioni cultura.

FirstDayOfWeek

Ottiene o imposta il primo giorno della settimana.

FullDateTimePattern

Ottiene o imposta la stringa di formato personalizzata per un valore di data e ora estese.

InvariantInfo

Ottiene l'oggetto DateTimeFormatInfo predefinito in sola lettura indipendente dalle impostazioni cultura associate alla lingua inglese.

IsReadOnly

Ottiene un valore che indica se l'oggetto DateTimeFormatInfo è di sola lettura.

LongDatePattern

Ottiene o imposta la stringa di formato personalizzata per un valore di data estesa.

LongTimePattern

Ottiene o imposta la stringa di formato personalizzata per un valore di ora estesa.

MonthDayPattern

Ottiene o imposta la stringa di formato personalizzata per un valore di mese e giorno.

MonthGenitiveNames

Ottiene o imposta una matrice di stringhe di nomi di mesi associata all'oggetto DateTimeFormatInfo corrente.

MonthNames

Ottiene o imposta una matrice unidimensionale di tipo String contenente i nomi estesi dei mesi specifici delle impostazioni cultura.

NativeCalendarName

Ottiene il nome nativo del calendario associato all'oggetto DateTimeFormatInfo corrente.

PMDesignator

Ottiene o imposta l'indicatore di stringa per le ore "post meridiem" (dopo mezzogiorno).

RFC1123Pattern

Ottiene la stringa di formato personalizzata per un valore di data e ora basato sulla specifica IETF (Internet Engineering Task Force) RFC (Request for Comments) 1123.

ShortDatePattern

Ottiene o imposta la stringa di formato personalizzata per un valore di data breve.

ShortestDayNames

Ottiene o imposta una matrice di stringhe dei nomi univoci dei giorni abbreviati più corti associati all'oggetto DateTimeFormatInfo corrente.

ShortTimePattern

Ottiene o imposta la stringa di formato personalizzata per un valore di ora breve.

SortableDateTimePattern

Ottiene la stringa di formato personalizzata per un valore ordinabile di data e ora.

TimeSeparator

Ottiene o imposta la stringa che separa i componenti dell'ora, ovvero l'ora, i minuti e i secondi.

UniversalSortableDateTimePattern

Ottiene la stringa di formato personalizzato per una stringa di data e ora ordinabile e universale, come definito da ISO 8601.

YearMonthPattern

Ottiene o imposta la stringa di formato personalizzata per un valore di anno e mese.

Metodi

Clone()

Crea una copia superficiale di DateTimeFormatInfo.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetAbbreviatedDayName(DayOfWeek)

Restituisce il nome abbreviato specifico delle impostazioni cultura del giorno della settimana specificato in base alle impostazioni cultura associate all'oggetto DateTimeFormatInfo corrente.

GetAbbreviatedEraName(Int32)

Restituisce la stringa contenente il nome abbreviato dell'era specificata, a condizione che esista un'abbreviazione.

GetAbbreviatedMonthName(Int32)

Restituisce il nome abbreviato specifico delle impostazioni cultura del mese specificato in base alle impostazioni cultura associate all'oggetto DateTimeFormatInfo corrente.

GetAllDateTimePatterns()

Restituisce tutti i modelli standard nei quali possono essere formattati i valori di data e ora.

GetAllDateTimePatterns(Char)

Restituisce tutti i modelli standard nei quali possono essere formattati i valori di data e ora mediante la stringa di formato standard specificato.

GetDayName(DayOfWeek)

Restituisce il nome completo specifico delle impostazioni cultura del giorno della settimana specificato in base alle impostazioni cultura associate all'oggetto DateTimeFormatInfo corrente.

GetEra(String)

Restituisce l'intero che rappresenta l'era specificata.

GetEraName(Int32)

Restituisce la stringa contenente il nome dell'era specificata.

GetFormat(Type)

Restituisce un oggetto del tipo specificato che fornisce un servizio di formattazione data e ora.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetInstance(IFormatProvider)

Restituisce l'oggetto DateTimeFormatInfo associato all'oggetto IFormatProvider specificato.

GetMonthName(Int32)

Restituisce il nome completo specifico delle impostazioni cultura del mese specificato in base alle impostazioni cultura associate all'oggetto DateTimeFormatInfo corrente.

GetShortestDayName(DayOfWeek)

Ottiene il nome del giorno abbreviato più corto per un giorno della settimana specificato associato all'oggetto DateTimeFormatInfo corrente.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ReadOnly(DateTimeFormatInfo)

Restituisce un wrapper DateTimeFormatInfo di sola lettura.

SetAllDateTimePatterns(String[], Char)

Imposta le stringhe di formato di data e ora che corrispondono a una stringa di formato standard specificata.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Popola un elemento SerializationInfo con i dati necessari per la serializzazione dell'oggetto di destinazione.

Si applica a

Vedi anche