Member 11429882 Ответов: 1

Как преобразовать дату и время в объект datetime или строку, содержащую часовой пояс


Я пытаюсь преобразовать дату в формат
"dd MMM yyyy HH:mm:ss.fff"
который содержит часовой пояс, но он дает мне ошибку, как будто строка не была в допустимом формате datetime.

Что я уже пробовал:

 string dts = "Sat, 16 Sep 2017 06:14:33 -0700 (PDT)";

DateTime dtime =DateTime.ParseExact(dts , "dd MMM yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture);

Jochen Arndt

Для вашей отредактированной версии 3:
При использовании ParseExact строка формата должна совпадать со строкой datetime именно так.

1 Ответов

Рейтинг:
11

OriginalGriff

Используйте DateTime.TryParseExact с регулярным выражением:

string inp = "Sat, 16 Sep 2017 06:14:33 -0700 (PDT)";
            DateTime dt;
            string noTzName = Regex.Replace(inp, @"(\d\d)(\d\d) \(\w+\)", "$1:$2").Trim();
            string dtFormat = "ddd, dd MMM yyyy HH:mm:ss zz";
            if (DateTime.TryParseExact(inp, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
                {
                Console.WriteLine(dt);
                }


Member 11429882

не работает где вы использовали noTzname

Member 11429882

Этот код не работает. Это не входит в Оператор if.

OriginalGriff

Он работает здесь, используя образцы данных, которые вы предоставляете - я скопировал их из вашего вопроса!
Поэтому начните с проверки того, что образец в вашем вопросе выглядит абсолютно идентично данным, которые вы пытаетесь разобрать...