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 jak AssumeLocal i AssumeUniversal .

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow