Analisi di stringhe di data e ora in .NETParsing Date and Time Strings in .NET

L'analisi delle stringhe per convertirle in oggetti DateTime richiede di specificare informazioni sulla modalità di rappresentazione di date e ore come testo.Parsing strings to convert them to DateTime objects requires you to specify information about how the dates and times are represented as text. Impostazioni cultura diverse usano ordini differenti per giorno, mese e anno.Different cultures use different orders for day, month, and year. Alcune rappresentazioni di ora usano un orologio di 24 ore, altre specificano "AM" e "PM".Some time representations use a 24-hour clock, others specify "AM" and "PM." Alcune applicazioni richiedono solo la data,Some applications need only the date. mentre altre solo l'oraOthers need only the time. e altre ancora devono specificare sia la data che l'ora.Still others need to specify both the date and the time. I metodi per la conversione di stringhe in oggetti DateTime consentono di fornire informazioni dettagliate sui formati previsti e sugli elementi di data e ora necessari per l'applicazione.The methods that convert strings to DateTime objects enable you to provide detailed information about the formats you expect and the elements of a date and time your application needs. La conversione corretta di testo in un oggetto DateTime include tre sottoattività:There are three subtasks to correctly converting text into a DateTime:

  1. È necessario specificare il formato previsto del testo che rappresenta una data e ora.You must specify the expected format of the text representing a date and time.
  2. È possibile specificare le impostazioni cultura per il formato di una data e ora.You may specify the culture for the format of a date time.
  3. È possibile specificare come impostare nella data e ora i componenti mancanti nella rappresentazione di testo.You may specify how missing components in the text representation are set in the date and time.

I metodi Parse e TryParse consentono di convertire molte rappresentazioni comuni di data e ora.The Parse and TryParse methods convert many common representations of a date and time. I metodi ParseExact e TryParseExact convertono una rappresentazione di stringa conforme al criterio specificato da una stringa di formato di data e ora.The ParseExact and TryParseExact methods convert a string representation that conforms to the pattern specified by a date and time format string. Per altri dettagli, vedere gli articoli relativi alle stringhe di formato di data e ora standard e alle stringhe di formato di data e ora personalizzato.(See the articles on standard date and time format strings and custom date and time format strings for details.)

L'oggetto DateTimeFormatInfo corrente consente un maggiore controllo sulla modalità di interpretazione del testo come data e ora.The current DateTimeFormatInfo object provides more control over how text should be interpreted as a date and time. Le proprietà di un oggetto DateTimeFormatInfo descrivono i separatori di data e ora, i nomi di mesi, giorni ed ere, nonché il formato per gli indicatori "AM" e "PM".Properties of a DateTimeFormatInfo describe the date and time separators, and the names of months, days, and eras, and the format for the "AM" and "PM" designations. Le impostazioni cultura del thread corrente forniscono un oggetto DateTimeFormatInfo che rappresenta le impostazioni cultura correnti.The current thread culture provides a DateTimeFormatInfo that represents the current culture. Se si vogliono usare impostazioni cultura specifiche o impostazioni personalizzate, specificare il parametro IFormatProvider di un metodo di analisi.If you want a specific culture or custom settings, you specify the IFormatProvider parameter of a parsing method. Per il parametro IFormatProvider, specificare un oggetto CultureInfo, che rappresenta determinate impostazioni cultura o un oggetto DateTimeFormatInfo.For the IFormatProvider parameter, specify a CultureInfo object, which represents a culture, or a DateTimeFormatInfo object.

Nel testo che rappresenta una data o ora è possibile che manchino alcune informazioni.The text representing a date or time may be missing some information. Ad esempio, la maggior parte delle persone dedurrebbe che la data "12 marzo" rappresenta l'anno corrente.For example, most people would assume the date "March 12" represents the current year. In modo analogo, "marzo 2018" rappresenta il mese di marzo nell'anno 2018.Similarly, "March 2018" represents the month of March in the year 2018. Il testo che rappresenta l'ora spesso include solo ore e minuti e l'indicatore AM/PM.Text representing time often does only includes hours, minutes, and an AM/PM designation. I metodi di analisi gestiscono le informazioni mancanti usando impostazioni predefinite ragionevoli:Parsing methods handle this missing information by using reasonable defaults:

  • Quando è presente solo l'ora, per la parte relativa alla data viene usata la data corrente.When only the time is present, the date portion uses the current date.
  • Se è presente solo la data, la parte dell'ora è mezzanotte.When only the date is present, the time portion is midnight.
  • Se l'anno non è specificato in una data, viene usato l'anno corrente.When the year isn't specified in a date, the current year is used.
  • Quando non viene specificato il giorno del mese, viene usato il primo giorno del mese.When the day of the month isn't specified, the first of the month is used.

Se la stringa include la data, deve essere incluso il mese e un giorno o un anno.If the date is present in the string, it must include the month and one of the day or year. Se è presente l'ora, deve includere l'ora e i minuti o l'indicatore AM/PM.If the time is present, it must include the hour, and either the minutes or the AM/PM designator.

È possibile specificare la costante NoCurrentDateDefault per sostituire queste impostazioni predefinite.You can specify the NoCurrentDateDefault constant to override these defaults. Quando si usa questa costante, le eventuali proprietà mancanti per anno, mese o giorno vengono impostate sul valore 1.When you use that constant, any missing year, month, or day properties are set to the value 1. L'ultimo esempio che usa Parse dimostra questo comportamento.The last example using Parse demonstrates this behavior.

Oltre a un componente di data e ora, la rappresentazione di stringa di una data e un'ora può includere un offset che indica in che misura l'ora differisce dall'ora UTC (Coordinated Universal Time).In addition to a date and a time component, the string representation of a date and time can include an offset that indicates how much the time differs from Coordinated Universal Time (UTC). Ad esempio, la stringa "2/14/2007 5:32:00 -7:00" definisce un'ora che precede di sette ore l'ora UTC.For example, the string "2/14/2007 5:32:00 -7:00" defines a time that is seven hours earlier than UTC. Se viene omesso l'offset dalla rappresentazione di stringa di un'ora, l'analisi restituisce un oggetto DateTime con la relativa proprietà Kind impostata su DateTimeKind.Unspecified.If an offset is omitted from the string representation of a time, parsing returns a DateTime object with its Kind property set to DateTimeKind.Unspecified. Se viene specificato un offset, l'analisi restituisce un oggetto DateTime con la relativa proprietà Kind impostata su DateTimeKind.Local e il relativo valore adeguato in base al fuso orario locale del computer.If an offset is specified, parsing returns a DateTime object with its Kind property set to DateTimeKind.Local and its value adjusted to the local time zone of your machine. È possibile modificare questo comportamento usando un valore DateTimeStyles con il metodo di analisi.You can modify this behavior by using a DateTimeStyles value with the parsing method.

Il provider di formato viene usato anche per interpretare una data numerica ambigua.The format provider is also used to interpret an ambiguous numeric date. Non risulta chiaro quali componenti della data rappresentata dalla stringa "02/03/04" sono il mese, il giorno e l'anno.It is not clear which components of the date represented by the string "02/03/04" are the month, day, and year. I componenti vengono interpretati in base all'ordine dei formati di data simili nel provider di formato.The components are interpreted according to the order of similar date formats in the format provider.

ParseParse

L'esempio seguente illustra l'uso del metodo DateTime.Parse per convertire un valore string in DateTime.The following example illustrates the use of the DateTime.Parse method to convert a string into a DateTime. Questo esempio usa le impostazioni cultura associate al thread corrente.This example uses the culture associated with the current thread. Se l'oggetto CultureInfo associato alle impostazioni cultura correnti non è in grado di analizzare la stringa di input, viene generata un'eccezione FormatException.If the CultureInfo associated with the current culture cannot parse the input string, a FormatException is thrown.

Suggerimento

Tutti gli esempi C# in questo articolo vengono eseguiti nel browser.All the C# samples in this article run in your browser. Premere il pulsante Run (Esegui) per visualizzare l'output.Press the Run button to see the output. È anche possibile modificarli per sperimentare.You can also edit them to experiment yourself.

Nota

Questi esempi sono disponibili nel repository docs di GitHub sia per C# che per VB.These examples are available in the GitHub docs repo for both C# and VB. In alternativa, è possibile scaricare il progetto come file ZIP per C# o VB.Or you can download the project as a zipfile for C# or VB.

string dateInput = "Jan 1, 2009";
DateTime parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM
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

È anche possibile definire in modo esplicito le impostazioni cultura di cui usare le convenzioni di formattazione per l'analisi di una stringa.You can also explicitly define the culture whose formatting conventions are used when you parse a string. È necessario specificare uno degli oggetti DateTimeFormatInfo standard restituiti dalla proprietà CultureInfo.DateTimeFormat.You specify one of the standard DateTimeFormatInfo objects returned by the CultureInfo.DateTimeFormat property. L'esempio seguente usa un provider di formato per analizzare una stringa in lingua tedesca in un DateTime.The following example uses a format provider to parse a German string into a DateTime. Crea un oggetto CultureInfo che rappresenta le impostazioni cultura de-DE.It creates a CultureInfo representing the de-DE culture. L'oggetto CultureInfo assicura l'analisi corretta di questa stringa particolare.That CultureInfo object ensures successful parsing of this particular string. Questo preclude qualsiasi impostazione in CurrentCulture di CurrentThread.This precludes whatever setting is in the CurrentCulture of the CurrentThread.

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
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)
' The example displays the following output:
'       6/12/2008 12:00:00 AM

Tuttavia, sebbene sia possibile usare overload del metodo Parse per specificare provider di formato personalizzati, il metodo non supporta l'analisi di formati non standard.However, although you can use overloads of the Parse method to specify custom format providers, the method does not support parsing non-standard formats. Per analizzare una data e un'ora espresse in un formato non standard, usare il metodo ParseExact.To parse a date and time expressed in a non-standard format, use the ParseExact method instead.

L'esempio seguente usa l'enumerazione DateTimeStyles per specificare che le informazioni sulla data e l'ora correnti non devono essere aggiunte a DateTime per i campi non specificati.The following example uses the DateTimeStyles enumeration to specify that the current date and time information should not be added to the DateTime for unspecified fields.

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
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)
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM

ParseExactParseExact

Il metodo DateTime.ParseExact converte una stringa in un oggetto DateTime se è conforme a uno dei modelli di stringa specificati.The DateTime.ParseExact method converts a string to a DateTime object if it conforms to one of the specified string patterns. Quando una stringa che non è in uno dei formati specificati viene passata a questo metodo, viene generata un'eccezione FormatException.When a string that is not one of the forms specified is passed to this method, a FormatException is thrown. È possibile specificare uno degli identificatori di formato di data e ora standard o una combinazione degli identificatori di formato personalizzato.You can specify one of the standard date and time format specifiers or a combination of the custom format specifiers. Usando gli identificatori di formato personalizzato è possibile costruire una stringa di riconoscimento personalizzata.Using the custom format specifiers, it is possible for you to construct a custom recognition string. Per una spiegazione degli identificatori, vedere gli argomenti relativi alle stringhe di formato di data e ora standard e alle stringhe di formato di data e ora personalizzato.For an explanation of the specifiers, see the topics on standard date and time format strings and custom date and time format strings.

Nell'esempio seguente, al metodo DateTime.ParseExact viene passato un oggetto stringa da analizzare, seguito da un identificatore di formato, seguito da un oggetto CultureInfo.In the following example, the DateTime.ParseExact method is passed a string object to parse, followed by a format specifier, followed by a CultureInfo object. Questo metodo ParseExact consente di analizzare solo le stringhe con il modello di data estesa nelle impostazioni cultura en-US.This ParseExact method can only parse strings that follow the long date pattern in the en-US culture.

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
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
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM

Ogni overload dei metodi Parse e ParseExact usa anche un parametro IFormatProvider che indica informazioni specifiche delle impostazioni cultura sulla formattazione della stringa.Each overload of the Parse and ParseExact methods also has an IFormatProvider parameter that provides culture-specific information about the formatting of the string. Questo oggetto IFormatProvider è un oggetto CultureInfo che rappresenta le impostazioni cultura standard o un oggetto DateTimeFormatInfo restituito dalla proprietà CultureInfo.DateTimeFormat.This IFormatProvider object is a CultureInfo object that represents a standard culture or a DateTimeFormatInfo object that is returned by the CultureInfo.DateTimeFormat property. ParseExact usa anche un argomento stringa o matrice di stringhe aggiuntivo che definisce uno o più formati di data e ora personalizzati.ParseExact also uses an additional string or string array argument that defines one or more custom date and time formats.

Vedere ancheSee also