#c# #asp.net-mvc #datetime-format
#c# #asp.net-mvc #datetime-формат
Вопрос:
var utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
Console.WriteLine(((utcOffset < TimeSpan.Zero) ? "-" : " ") utcOffset.ToString("hhmm"));
Приведенный выше код работает нормально. Но мне нужно отобразить смещение, например, 05:00. Есть ли какой-либо способ достичь этого формата?
Комментарии:
1. Просто использовать
hh':'mm
в качестве строки формата? Кроме того, используйтеTimeZoneInfo
вместоTimeZone
.2. Да, я пробовал это, но так не работает. Например, utcOffset. toString(«hh:mm»));
3. Прочитайте мой комментарий еще раз. Я не говорил
hh:mm
.4. Например, консоль. WriteLine(((utcOffset. BaseUtcOffset <интервал времени.Ноль)? «-«: » «) utcOffset. Базовый utcoffset. Часы «:» utcOffset. Базовый utcoffset. Минут); // вывод 5:0, я пытаюсь использовать ваше предложение TimeZoneInfo, но мне нужно 05:00
5. Я имел в виду
utcOffset.ToString("hh':'mm"));
…
Ответ №1:
Из документов:
Пользовательские спецификаторы формата временных интервалов не включают символы-разделители-заполнители, такие как символы, которые отделяют дни от часов, часы от минут или секунды от долей секунды. Вместо этого эти символы должны быть включены в строку пользовательского формата как строковые литералы.
Таким образом, вам нужно экранировать символ в вашей строке формата, которого нет в списке на странице выше, либо окружив его '
символом , либо обратной косой чертой, так что:
utcOffset.ToString("hh':'mm")
Однако на самом деле вам не нужно делать это форматирование самостоятельно, если вы форматируете a DateTimeOffset
, а не TimeSpan
. Если вы сделаете это, вам также не понадобится вся эта путаница с «получением смещения UTC».
Вам просто нужен спецификатор пользовательского формата zzz:
DateTimeOffset.Now.ToString("zzz")
Вам не нужны все TimeZone
материалы.
Ответ №2:
Вместо того, чтобы использовать TimeZone
для поиска часового пояса DateTime.Now
, вы можете использовать DateTimeOffset.Now
строку zzz
формата и CultureInfo.InvariantCulture
для достижения этой цели:
Console.WriteLine(DateTimeOffset.Now.ToString("HHmmzzz", System.Globalization.CultureInfo.InvariantCulture));
// outputs 1255 02:00
Если вам просто нужно смещение в этом формате, вы можете использовать "zzz"
вместо "HHmmzzzz"
.
Комментарии:
1. Не могли бы вы уточнить свой ответ? Я не получаю тот же результат, что и ваш. В нем говорится, что входная строка была не в правильном формате. Спасибо.
2. Извините, я пропустил
.Now
. Можете ли вы попробовать еще раз?