.NET Framework
Синхронизация DateTime
Поиск…
ParseExact
var dateString = "2015-11-24";
var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null);
Console.WriteLine(date);
24.11.2013 12:00:00
Обратите внимание, что передача CultureInfo.CurrentCulture
в качестве третьего параметра идентична передаче null
. Или вы можете передать определенную культуру.
Форматировать строки
Строка ввода может быть в любом формате, соответствующем строке формата
var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null);
Console.WriteLine(date);
24.11.2013 12:00:00
Любые символы, не являющиеся спецификаторами формата, рассматриваются как литералы
var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null);
Console.WriteLine(date);
24.11.2013 12:00:00
Вопросы для спецификаторов формата
var date = DateTime.ParseExact("2015-01-24 11:11:30", "yyyy-mm-dd hh:MM:ss", null);
Console.WriteLine(date);
24.11.2011 11:01:30
Обратите внимание, что значения месяца и минуты были проанализированы в неправильные адресаты.
Строки с одним символьным символом должны быть одним из стандартных форматов
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);
Исключения
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
Обработка нескольких возможных форматов
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);
Обработка различий в культуре
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);
День: 11; Месяц: 10
date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
День: 10; Месяц: 11
TryParse
Этот метод принимает строку как входную, пытается проанализировать ее в DateTime
и возвращает логический результат, указывающий на успех или неудачу. Если вызов преуспевает, переменная, переданная как параметр out
заполняется анализируемым результатом.
Если синтаксический анализ не выполняется, переменная, переданная как параметр out
устанавливается на значение по умолчанию DateTime.MinValue
.
TryParse (строка, вне DateTime)
DateTime parsedValue;
if (DateTime.TryParse("monkey", out parsedValue))
{
Console.WriteLine("Apparently, 'monkey' is a date/time value. Who knew?");
}
Этот метод пытается проанализировать входную строку на основе региональных настроек системы и известных форматов, таких как ISO 8601 и других распространенных форматов.
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
Поскольку этот метод не принимает информацию о культуре, он использует языковой стандарт системы. Это может привести к неожиданным результатам.
// System set to en-US culture
bool result = DateTime.TryParse("24/11/2015", out parsedValue);
Console.WriteLine(result);
Ложь
// System set to en-GB culture
bool result = DateTime.TryParse("11/24/2015", out parsedValue);
Console.WriteLine(result);
Ложь
// System set to en-GB culture
bool result = DateTime.TryParse("10/11/2015", out parsedValue);
Console.WriteLine(result);
Правда
Обратите внимание: если вы находитесь в США, вы можете быть удивлены, что результат анализа будет 10 ноября, а не 11 октября.
TryParse (строка, IFormatProvider, DateTimeStyles, outTimeTime)
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?");
}
В отличие от метода sibling, эта перегрузка позволяет указать определенную культуру и стиль (ы). Передача null
для параметра IFormatProvider
использует культуру системы.
Исключения
Обратите внимание, что этот метод может генерировать исключение при определенных условиях. Они относятся к параметрам, введенным для этой перегрузки: IFormatProvider
и DateTimeStyles
.
-
NotSupportedException
:IFormatProvider
указывает нейтральную культуру -
ArgumentException
:DateTimeStyles
не является допустимым параметром или содержит несовместимые флаги, такие какAssumeLocal
иAssumeUniversal
.
TryParseExact
Этот метод ведет себя как комбинация TryParse
и ParseExact
: он позволяет ParseExact
настраиваемый формат (ы) и возвращает логический результат, указывающий на успех или неудачу, а не на выброс исключения, если синтаксический анализ не выполняется.
TryParseExact (строка, строка, IFormatProvider, DateTimeStyles, out DateTime)
Эта перегрузка пытается проанализировать входную строку в определенном формате. Строка ввода должна соответствовать этому формату для анализа.
DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true
TryParseExact (строка, строка [], IFormatProvider, DateTimeStyles, outTimeTime)
Эта перегрузка пытается разобрать входную строку на массив форматов. Строка ввода должна соответствовать хотя бы одному формату для анализа.
DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true