Создайте DateTime из строки без применения часового пояса или перехода на летнее время.
-
07-09-2020 - |
Вопрос
Как создать переменную DateTime из строки, которая уже настроена для UTC?Я запускаю это на машине, настроенной на BST (GMT+1).Если я запустил следующую строку кода:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00");
а затем использовать это значение в тесте по значениям базы данных, хранящим (UTC), тогда может показаться, что Convert.ToDateTime() фактически дает мне значение UTC 14:20.Я не хочу, чтобы он выполнял преобразование — я просто хочу, чтобы он признал, что моя строка DateTime уже находится в формате UTC.
Спасибо.
Решение
Пробрасывайте строку и укажите, что он должен принимать время UTC, когда в строке нет часового пояса:
DateTime clientsideProfileSyncStamp =
DateTime.Parse(
"20-May-2011 15:20:00",
CultureInfo.CurrentCulture,
DateTimeStyles.AssumeUniversal
);
. Другие советы
Использование
DateTimeOffset.Parse
.
@ Ответ Гуффы очень хорош, но я хотел бы добавить дополнительный ответ. Если ваша строка DateTime выглядит так, чтобы «2017-11-27T05: 30: 00.000z», то AssumeUniversal не работает. Попробуйте это:
DateTime.Parse("2017-11-27T05:30:00.000Z", null, System.Globalization.DateTimeStyles.AdjustToUniversal);
.
Есть небольшая разница между AssumeUniversal и регулировкой.Читайте здесь: Разница между assumeUniversal и регулировкой>
Добавить генеракодицетагкод к строке TATETIME:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00Z");
Console.Write(clientsideProfileSyncStamp.ToUniversalTime()); // 20-May-2011 15:20:00
. Не забывайте TryParse
вариант, который позволяет обрабатывать ошибку синтаксического анализа без исключения
DateTime clientsideProfileSyncStamp;
DateTime.TryParse(
"20-May-2011 15:20:00",
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.AssumeUniversal,
out clientsideProfileSyncStamp
);
Также, если вы не используете ParseExact
или TryParseExact
он примет вывод Kind
является Local
поэтому вы также можете использовать ToUniversalTime()
clientsideProfileSyncStamp.ToUniversalTime();
DateTime.Parse()
или DateTime.TryParse()
var clientsideProfileSyncStamp = DateTime.Parse("20-May-2011 15:20:00");
.