Condividi tramite


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. Con i metodi ParseExact e TryParseExact è possibile convertire una rappresentazione di stringa conforme con il modello specificato da una stringa di formato di data e ora.

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 dalla lingua del thread corrente o esplicitamente dal parametro IFormatProvider di un metodo di analisi. Per il parametro IFormatProvider, specificare un oggetto CultureInfo, che rappresenta una lingua, 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.

Se nella rappresentazione di stringa oraria viene omesso il fuso orario, l'analisi restituisce un oggetto DateTime con la proprietà Kind impostata su Unspecified. Se invece il fuso orario è specificato, ad esempio dalla differenza di fuso orario "-07: 00", l'analisi restituisce un oggetto DateTime con la proprietà Kind impostata su Local e il valore adattato 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, viene utilizzata la lingua associata al thread corrente. Se il CultureInfo associato alla lingua corrente non è in grado di analizzare la stringa di input, verrà generata l'eccezione FormatException.

Dim MyString As String = "Jan 1, 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
string MyString = "Jan 1, 2002";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);

È possibile inoltre specificare un CultureInfo impostato su una delle lingue definite da tale oggetto. 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 alla lingua 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

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);

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

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(MyDateTime);

ParseExact

Il metodo ParseExact consente di convertire in un DateTime solamente il modello di stringa specificato. 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 dettagliate sugli identificatori, vedere la sezione Stringhe di formato di data e ora.

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 della lingua en-US.

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "Tuesday, April 10, 2001"
Dim MyDateTime As DateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = " Tuesday, April 10, 2001";
DateTime MyDateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo);
Console.WriteLine(MyDateTime);

Vedere anche

Altre risorse

Analisi delle stringhe
Formattazione dei tipi di dati
Conversione di tipi