Разобрать дату строки (включая EEST), но она не удалась - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь разобрать строку в DateTime, но она не работает и выдает исключение. Код указан ниже:

static void Main(string[] args)
{
    string dt = "Wed Sep 05 00:00:00 EEST 2012";
    string Fm = "EEE MMM dd HH:mm:ss zzz yyyy";
    DateTime dateTime;

    dateTime = DateTime.ParseExact(dt, Fm, CultureInfo.InvariantCulture);

    Console.WriteLine(dateTime.Date);
}

Это исключение:

Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTime.ParseExact(String s, String format, IFormatProvider provider)
   at DateParser.Program.Main(String[] args) in C:\Users\AhmedSaeed\source\repos\DateParser\DateParser\Program.cs:line 17

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

string dt = "Среда, сентябрь 05 00:00:00 EEST 2012";

Хотя реальный часовой пояс, EEST не соответствует формату zzz (по длине) и это может быть проблемой.

Кроме того, как сказал апомен, EEE не является допустимой строкой формата.

1 голос
/ 21 марта 2019

DateTime структура не хранит информацию о часовом поясе.Он просто имеет значения даты и времени, которые основаны на длинных именах Ticks.Вот почему нет пользовательской строки формата даты и времени , которая соответствует этому сокращению.Спецификатор формата zzz предназначен для смещения часового пояса локальной операционной системы от UTC со знаком, и он не имеет смысл использовать его с синтаксическим анализом DateTime, как указано в документации.,

Если вы хотите разобрать аббревиатуру в вашей строке, вы должны экранировать ее как строковый литерал.Кроме этого, нет способа разобрать его.С другой стороны, сокращения часовых поясов даже не уникальны.Например, CST может означать центральное стандартное время, стандартное время Китая или стандартное время Кубы.

Также отсутствует спецификатор формата даты EEE.Сокращенные названия дней совпадают с ddd спецификатором формата .

string dt = "Wed Sep 05 00:00:00 EEST 2012";
string Fm = "ddd MMM dd HH:mm:ss 'EEST' yyyy";

DateTime dateTime = DateTime.ParseExact(dt, Fm, CultureInfo.InvariantCulture);

Console.WriteLine(dateTime.Date);

Здесь a demonstration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...