.NET Framework
Data e ora di analisi
Ricerca…
ParseExact
var dateString = "2015-11-24";
var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Si noti che il passaggio di CultureInfo.CurrentCulture
come terzo parametro è identico al passaggio di null
. Oppure, puoi passare una cultura specifica.
Formato stringhe
La stringa di input può essere in qualsiasi formato che corrisponda alla stringa di formato
var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Tutti i caratteri che non sono specificatori di formato sono trattati come valori letterali
var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Il caso vale per gli specificatori di formato
var date = DateTime.ParseExact("2015-01-24 11:11:30", "yyyy-mm-dd hh:MM:ss", null);
Console.WriteLine(date);
11/24/2015 11:01:30 AM
Si noti che i valori del mese e dei minuti sono stati analizzati nelle destinazioni sbagliate.
Le stringhe di formato a carattere singolo devono essere uno dei formati standard
var date = DateTime.ParseExact("11/24/2015", "d", new CultureInfo("en-US"));
var date = DateTime.ParseExact("2015-11-24T10:15:45", "s", null);
var date = DateTime.ParseExact("2015-11-24 10:15:45Z", "u", null);
eccezioni
ArgumentNullException
var date = DateTime.ParseExact(null, "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", null, null);
FormatException
var date = DateTime.ParseExact("", "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", "", null);
var date = DateTime.ParseExact("2015-0C-24", "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", "yyyy-QQ-dd", null);
// Single-character format strings must be one of the standard formats
var date = DateTime.ParseExact("2015-11-24", "q", null);
// Format strings must match the input exactly* (see next section)
var date = DateTime.ParseExact("2015-11-24", "d", null); // Expects 11/24/2015 or 24/11/2015 for most cultures
Gestire più formati possibili
var date = DateTime.ParseExact("2015-11-24T10:15:45",
new [] { "s", "t", "u", "yyyy-MM-dd" }, // Will succeed as long as input matches one of these
CultureInfo.CurrentCulture, DateTimeStyles.None);
Gestire le differenze culturali
var dateString = "10/11/2015";
var date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-US"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Giorno: 11; Mese: 10
date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Giorno: 10; Mese: 11
TryParse
Questo metodo accetta una stringa come input, tenta di analizzarla in un DateTime
e restituisce un risultato booleano che indica il successo o l'insuccesso. Se la chiamata ha esito positivo, la variabile viene trasmessa quando il parametro out
viene popolato con il risultato analizzato.
Se l'analisi fallisce, la variabile passa come il parametro out
è impostato sul valore predefinito, DateTime.MinValue
.
TryParse (string, out DateTime)
DateTime parsedValue;
if (DateTime.TryParse("monkey", out parsedValue))
{
Console.WriteLine("Apparently, 'monkey' is a date/time value. Who knew?");
}
Questo metodo tenta di analizzare la stringa di input in base alle impostazioni internazionali del sistema e ai formati noti come ISO 8601 e altri formati comuni.
DateTime.TryParse("11/24/2015 14:28:42", out parsedValue); // true
DateTime.TryParse("2015-11-24 14:28:42", out parsedValue); // true
DateTime.TryParse("2015-11-24T14:28:42", out parsedValue); // true
DateTime.TryParse("Sat, 24 Nov 2015 14:28:42", out parsedValue); // true
Poiché questo metodo non accetta informazioni sulla cultura, utilizza le impostazioni locali del sistema. Questo può portare a risultati inaspettati.
// System set to en-US culture
bool result = DateTime.TryParse("24/11/2015", out parsedValue);
Console.WriteLine(result);
falso
// System set to en-GB culture
bool result = DateTime.TryParse("11/24/2015", out parsedValue);
Console.WriteLine(result);
falso
// System set to en-GB culture
bool result = DateTime.TryParse("10/11/2015", out parsedValue);
Console.WriteLine(result);
Vero
Nota che se sei negli Stati Uniti, potresti essere sorpreso che il risultato analizzato sia il 10 novembre, non l'11 ottobre.
TryParse (string, IFormatProvider, DateTimeStyles, out DateTime)
if (DateTime.TryParse(" monkey ", new CultureInfo("en-GB"),
DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite, out parsedValue)
{
Console.WriteLine("Apparently, ' monkey ' is a date/time value. Who knew?");
}
A differenza del metodo fratello, questo overload consente di specificare una cultura e uno o più stili specifici. Il passaggio null
per il parametro IFormatProvider
utilizza la cultura di sistema.
eccezioni
Si noti che è possibile che questo metodo generi un'eccezione in determinate condizioni. Questi si riferiscono ai parametri introdotti per questo overload: IFormatProvider
e DateTimeStyles
.
-
NotSupportedException
:IFormatProvider
specifica una lingua neutra -
ArgumentException
:DateTimeStyles
non è un'opzione valida o contiene flag incompatibili comeAssumeLocal
eAssumeUniversal
.
TryParseExact
Questo metodo si comporta come una combinazione di TryParse
e ParseExact
: consente di specificare il / i formato / i personalizzato e restituisce un risultato booleano che indica il successo o l'insuccesso anziché lanciare un'eccezione se l'analisi fallisce.
TryParseExact (stringa, stringa, IFormatProvider, DateTimeStyles, out DateTime)
Questo overload tenta di analizzare la stringa di input su un formato specifico. La stringa di input deve corrispondere a quel formato per poter essere analizzata.
DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true
TryParseExact (string, string [], IFormatProvider, DateTimeStyles, out DateTime)
Questo overload tenta di analizzare la stringa di input su una serie di formati. La stringa di input deve corrispondere ad almeno un formato per poter essere analizzata.
DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true