Analisi delle stringhe relative a data e ora

I metodi di analisi consentono di convertire la rappresentazione di stringhe di data e ora in un oggetto DateTime equivalente. Con i metodi Parse e TryParse è possibile convertire alcune rappresentazioni comuni di data e ora. I metodi ParseExact e TryParseExact consentono di convertire una rappresentazione di stringa conforme al modello specificato da una stringa di formato di data e ora. Vedere gli argomenti Stringhe di formato di data e ora standard e Stringhe di formato di data e ora personalizzate.

L'analisi è influenzata dalle proprietà di un provider di formato che fornisce informazioni quali le stringhe utilizzate per i separatori di data e ora e i nomi di mesi, giorni ed ere. Il provider di formato è l'oggetto DateTimeFormatInfo corrente fornito implicitamente dalle impostazioni cultura del thread corrente o esplicitamente dal parametro IFormatProvider di un metodo di analisi. Per il parametro IFormatProvider, specificare un oggetto CultureInfo, che rappresenta determinate impostazioni cultura, o un oggetto DateTimeFormatInfo.

Nella rappresentazione di stringa di una data da analizzare devono essere inclusi il mese e almeno un giorno o un anno. Nella rappresentazione di stringa oraria devono essere inclusi l'ora e almeno i minuti o l'indicatore A.M./P.M. L'analisi tuttavia fornisce se possibile valori predefiniti per i componenti omessi. Se manca una data verrà utilizzato come valore predefinito la data corrente, se manca l'anno verrà utilizzato come valore predefinito l'anno corrente, se manca il giorno del mese verrà utilizzato come valore predefinito il primo giorno del mese e se manca l'ora verrà utilizzato come valore predefinito la mezzanotte.

Se nella rappresentazione di stringa viene specificata solo l'ora, l'analisi restituisce un oggetto DateTime con le proprietà Year, Month e Day impostate sui valori corrispondenti della proprietà Today. Se tuttavia nel metodo di analisi è specificata la costante NoCurrentDateDefault, le proprietà dell'anno, del mese e del giorno risultanti vengono impostate sul valore 1.

Oltre a un componente data e ora, la rappresentazione di stringa di una data e ora può includere un offset che indica la differenza dall'ora UTC (Coordinated Universal Time). Ad esempio, la stringa "2/14/2007 5:32:00 -7:00" definisce una data e ora indietro di sette ore rispetto all'ora UTC. Se nella rappresentazione di stringa di data e ora viene omesso l'offset, l'analisi restituisce un oggetto DateTime con la proprietà Kind impostata su DateTimeKind.Unspecified. Se invece l'offset viene specificato, l'analisi restituisce un oggetto DateTime con la proprietà Kind impostata su Local e il valore regolato in base al fuso orario locale del computer. È possibile modificare questo comportamento utilizzando una costante DateTimeStyles con il metodo di analisi.

Il provider di formato viene utilizzato anche per interpretare una data numerica ambigua. Nella data rappresentata dalla stringa "02/03/04" ad esempio non è chiaro a quali componenti corrispondano il mese, il giorno e l'anno. In questo caso i componenti vengono interpretati secondo l'ordine di formati di data simili del provider di formato.

Parse

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del metodo Parse per convertire una stringa in un DateTime. Per eseguire l'analisi, vengono utilizzate le impostazioni cultura associate al thread corrente. Se l'oggetto CultureInfo associato alle impostazioni cultura correnti non è in grado di analizzare la stringa di input, verrà generata un'eccezione FormatException.

Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
'       1/1/2009 12:00:00 AM
string MyString = "Jan 1, 2009";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM

È inoltre possibile specificare un oggetto CultureInfo impostato su una delle impostazioni cultura definite da tale oggetto oppure è possibile specificare uno degli oggetti DateTimeFormatInfo standard restituiti dalla proprietà CultureInfo.DateTimeFormat. Nell'esempio di codice che segue viene utilizzato un provider di formato per analizzare una stringa in lingua tedesca e convertirla in un DateTime. Un CultureInfo relativo alle impostazioni cultura de-DE viene definito e passato con la stringa da analizzare per assicurare che l'operazione venga eseguita correttamente. In questo modo l'impostazione definita nell'oggetto CurrentCulture di CurrentThread viene ignorata.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output:
//       6/12/2008 12:00:00 AM

Tuttavia, sebbene sia possibile utilizzare gli overload del metodo Parse per specificare i provider di formato personalizzato, il metodo non supporta l'utilizzo di provider di formato non standard. Per analizzare una data e un'ora espresse in un formato non standard, utilizzare in alternativa il metodo ParseExact.

Nell'esempio di codice seguente viene utilizzata l'enumerazione DateTimeStyles per indicare che la data e ora correnti non devono essere aggiunte all'oggetto DateTime per i campi non definiti dalla stringa specificata.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, _
                                   DateTimeStyles.NoCurrentDateDefault)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, 
                                           DateTimeStyles.NoCurrentDateDefault);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output if the current culture is en-US:
//      6/12/2008 12:00:00 AM

ParseExact

Il metodo DateTime.ParseExact converte una stringa conforme a un modello di stringa specificato in un oggetto DateTime. Se si passa a questo metodo una stringa di formato diverso da quello specificato, viene generata un'eccezione FormatException. È possibile specificare uno degli identificatori di formato di data e ora standard o una combinazione limitata degli identificatori di formato di data e ora personalizzati. Gli identificatori di formato personalizzati consentono di creare una stringa di riconoscimento personalizzata. Per informazioni sugli identificatori, vedere gli argomenti Stringhe di formato di data e ora standard e Stringhe di formato di data e ora personalizzate.

Ogni overload del metodo ParseExact ha anche un parametro IFormatProvider che in genere fornisce informazioni sulle impostazioni cultura specifiche relative alla formattazione della stringa. In genere, l'oggetto IFormatProvider è un oggetto CultureInfo che rappresenta le impostazioni cultura standard o un oggetto DateTimeFormatInfo restituito dalla proprietà CultureInfo.DateTimeFormat. Tuttavia, a differenza di altre funzioni di analisi di data e ora, questo metodo supporta anche un oggetto IFormatProvider che definisce un formato di data e ora non standard.

Nell'esempio seguente, al metodo ParseExact viene passato un oggetto stringa da analizzare, seguito da un identificatore di formato e quindi da un oggetto CultureInfo. Il metodo ParseExact consente di analizzare solamente le stringhe con il formato di data estesa delle impostazioni cultura en-US.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
      Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
      For Each dateString As String In MyString
         Try
            Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D", _
                                                             MyCultureInfo)
            Console.WriteLine(MyDateTime)
         Catch e As FormatException
            Console.WriteLine("Unable to parse '{0}'", dateString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("en-US");
      string[] MyString = {" Friday, April 10, 2009", "Friday, April 10, 2009"};
      foreach (string dateString in MyString)
      {
         try {
            DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
            Console.WriteLine(MyDateTime);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM

Vedere anche

Concetti

Formattazione dei tipi di dati

Conversione di tipi in .NET Framework

Altre risorse

Analisi delle stringhe