.NET Framework
DateTime-parsing
Sök…
ParseExact
var dateString = "2015-11-24";
var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null);
Console.WriteLine(date);
11/24/2015 12:00:00
Observera att passering av CultureInfo.CurrentCulture
som den tredje parametern är identisk med att passera null
. Eller så kan du passera en specifik kultur.
Formatera strängar
Inmatningssträngen kan vara i vilket format som helst som matchar formatsträngen
var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null);
Console.WriteLine(date);
11/24/2015 12:00:00
Alla tecken som inte är formatformat behandlas som bokstäver
var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null);
Console.WriteLine(date);
11/24/2015 12:00:00
Ärenden gäller formatformat
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
Observera att månads- och minutvärdena har analyserats till fel destinationer.
Strängar med ett teckenformat måste vara ett av standardformaten
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);
undantag
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
Hantering av flera möjliga format
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);
Hantering av kulturskillnader
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);
Dag: 11; Månad: 10
date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Dag: 10; Månad: 11
TryParse
Denna metod accepterar en sträng som inmatning, försöker para den till en DateTime
och returnerar ett booleskt resultat som indikerar framgång eller misslyckande. Om samtalet lyckas fylls variabeln som passeras som out
parametern med det analyserade resultatet.
Om analysen misslyckas ställs variabeln som passeras som out
parametern in på standardvärdet 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?");
}
Den här metoden försöker att analysera inmatningssträngen baserad på systemets regionala inställningar och kända format som ISO 8601 och andra vanliga format.
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
Eftersom den här metoden inte accepterar kulturinformation använder den systeminställningen. Detta kan leda till oväntade resultat.
// System set to en-US culture
bool result = DateTime.TryParse("24/11/2015", out parsedValue);
Console.WriteLine(result);
Falsk
// System set to en-GB culture
bool result = DateTime.TryParse("11/24/2015", out parsedValue);
Console.WriteLine(result);
Falsk
// System set to en-GB culture
bool result = DateTime.TryParse("10/11/2015", out parsedValue);
Console.WriteLine(result);
Sann
Observera att om du är i USA kan du bli förvånad över att det analyserade resultatet är 10 november, inte 11 oktober.
TryParse (sträng, 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?");
}
Till skillnad från dess syskonmetod gör det möjligt för denna överbelastning att specificera en viss kultur och stil. Att IFormatProvider
null
för IFormatProvider
parametern använder IFormatProvider
.
undantag
Observera att det är möjligt för denna metod att kasta ett undantag under vissa förhållanden. Dessa avser parametrarna som introducerats för denna överbelastning: IFormatProvider
och DateTimeStyles
.
-
NotSupportedException
:IFormatProvider
anger en neutral kultur -
ArgumentException
:DateTimeStyles
är inte ett giltigt alternativ, eller innehåller inkompatibla flaggor somAssumeLocal
ochAssumeUniversal
.
TryParseExact
Den här metoden fungerar som en kombination av TryParse
och ParseExact
: Den tillåter anpassade format (er) att anges och returnerar ett booleskt resultat som indikerar framgång eller misslyckande snarare än att kasta ett undantag om analysen misslyckas.
TryParseExact (sträng, sträng, IFormatProvider, DateTimeStyles, out DateTime)
Denna överbelastning försöker para ingångssträngen mot ett specifikt format. Inmatningssträngen måste matcha det formatet för att analyseras.
DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true
TryParseExact (string, string [], IFormatProvider, DateTimeStyles, out DateTime)
Denna överbelastning försöker para ingångssträngen mot en mängd format. Inmatningssträngen måste matcha minst ett format för att kunna analyseras.
DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true