.NET Framework
Analiza składni DateTime
Szukaj…
ParseExact
var dateString = "2015-11-24";
var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null);
Console.WriteLine(date);
11/24/2015 12:00:00 AM
Zauważ, że przekazanie CultureInfo.CurrentCulture
jako trzeciego parametru jest identyczne z przekazaniem null
. Lub możesz przekazać określoną kulturę.
Formatuj ciągi
Ciąg wejściowy może być w dowolnym formacie, który pasuje do ciągu formatu
var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null);
Console.WriteLine(date);
11/24/2015 12:00:00 AM
Wszelkie znaki, które nie są specyfikatorami formatu, są traktowane jako literały
var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null);
Console.WriteLine(date);
11/24/2015 12:00:00 AM
Sprawa ma znaczenie dla specyfikatorów formatu
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
Pamiętaj, że wartości miesiąca i minuty zostały przeanalizowane w niewłaściwych miejscach docelowych.
Ciągi znaków jednoznakowych muszą być jednym ze standardowych formatów
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);
Wyjątki
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
Obsługa wielu możliwych formatów
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);
Radzenie sobie z różnicami kulturowymi
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);
Dzień: 11; Miesiąc: 10
date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Dzień: 10; Miesiąc: 11
TryParse
Ta metoda przyjmuje ciąg jako dane wejściowe, próbuje parsować go w DateTime
i zwraca wynik logiczny wskazujący powodzenie lub niepowodzenie. Jeśli wywołanie się powiedzie, zmienna przekazywana jako out
parametru jest wypełniona parsed wyniku.
Jeśli nie parse, zmienna przekazywana jako out
parametr jest ustawiony na wartość domyślną, DateTime.MinValue
.
TryParse (ciąg, data i godzina)
DateTime parsedValue;
if (DateTime.TryParse("monkey", out parsedValue))
{
Console.WriteLine("Apparently, 'monkey' is a date/time value. Who knew?");
}
Ta metoda próbuje przeanalizować ciąg wejściowy w oparciu o systemowe ustawienia regionalne i znane formaty, takie jak ISO 8601 i inne popularne formaty.
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
Ponieważ ta metoda nie przyjmuje informacji o kulturze, używa ustawień regionalnych systemu. Może to prowadzić do nieoczekiwanych rezultatów.
// System set to en-US culture
bool result = DateTime.TryParse("24/11/2015", out parsedValue);
Console.WriteLine(result);
Fałszywy
// System set to en-GB culture
bool result = DateTime.TryParse("11/24/2015", out parsedValue);
Console.WriteLine(result);
Fałszywy
// System set to en-GB culture
bool result = DateTime.TryParse("10/11/2015", out parsedValue);
Console.WriteLine(result);
Prawdziwe
Pamiętaj, że jeśli jesteś w USA, możesz być zaskoczony, że przeanalizowany wynik to 10 listopada, a nie 11 października.
TryParse (ciąg, IFormatProvider, DateTimeStyles, obecnie 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?");
}
W przeciwieństwie do metody rodzeństwa, to przeciążenie pozwala na określenie konkretnej kultury i stylu. Przekazywanie null
dla parametru IFormatProvider
wykorzystuje kulturę systemową.
Wyjątki
Należy pamiętać, że ta metoda może zgłosić wyjątek pod pewnymi warunkami. Dotyczą one parametrów wprowadzonych dla tego przeciążenia: IFormatProvider
i DateTimeStyles
.
-
NotSupportedException
:IFormatProvider
określa neutralną kulturę -
ArgumentException
:DateTimeStyles
nie jest prawidłową opcją lub zawiera niezgodne flagi, takie jakAssumeLocal
iAssumeUniversal
.
TryParseExact
Ta metoda zachowuje się jak kombinacja TryParse
i ParseExact
: Pozwala ParseExact
niestandardowe formaty i zwraca wynik logiczny wskazujący powodzenie lub niepowodzenie zamiast zgłaszania wyjątku, jeśli parsowanie się nie powiedzie.
TryParseExact (ciąg, ciąg, IFormatProvider, DateTimeStyles, obecnie DateTime)
To przeciążenie próbuje parsować łańcuch wejściowy względem określonego formatu. Łańcuch wejściowy musi być zgodny z tym formatem, aby mógł zostać przeanalizowany.
DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true
TryParseExact (ciąg, ciąg [], IFormatProvider, DateTimeStyles, obecnie DateTime)
To przeciążenie próbuje parsować łańcuch wejściowy względem tablicy formatów. Łańcuch wejściowy musi być zgodny z co najmniej jednym formatem, aby mógł zostać przeanalizowany.
DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true