Форматирование TimeSpan, чтобы оно выглядело как смещение часового пояса

Как я могу отформатировать объект TimeSpan, чтобы он выглядел как смещение часового пояса, например:

+0700

or

-0600

Я использую GetUtcOffset, чтобы получить смещение, и оно работает, но возвращает объект TimeSpan.


person Icemanind    schedule 20.01.2013    source источник


Ответы (4)


Если вы используете .Net 4.0 или выше, вы можете использовать метод ToString для временного промежутка со спецификатором hh и mm (хотя не уверен, что он будет отображать знаки + и -):

TimeSpan span = new TimeSpan(7, 0, 0);
Console.WriteLine(span.ToString("hhmm"));

Если нет, вы можете просто отформатировать свойства Hours и Minutes вместе с некоторым условным форматированием, чтобы всегда отображались знаки + и -:

TimeSpan span = new TimeSpan(7, 0, 0);
Console.WriteLine("{0:+00;-00}{1:00}", span.Hours, span.Minutes);

Справочник по строкам формата TimeSpan: http://msdn.microsoft.com/en-gb/library/ee372287.aspx

Справочник по строкам числового формата и их условному форматированию: http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

person Sean Airey    schedule 20.01.2013
comment
Но если TimeSpan отрицательное, он покажет результат как -1-30. Следует использовать Math.Abs(span.Minutes). - person STiLeTT; 08.02.2018

Попробуйте что-то вроде:

var timespan = new TimeSpan(-5,0,0); // EST
var offset = String.Format("{0}{1:00}{2:00}",(timespan.Hours >= 0 ? "+" : String.Empty),timespan.Hours,timespan.Minutes);

Я добавляю +, когда число неотрицательно (для отрицательных чисел должно выводиться -).

person Lloyd    schedule 20.01.2013

Я думаю, вы могли бы использовать это:

String.Format("{0:zzz}", ts);
person Tommaso Belluzzo    schedule 20.01.2013
comment
который содержит : между часами и минутами, которые можно заменить в соответствии с требованиями. - person eulerfx; 20.01.2013
comment
Это выводит как двоеточие, так и секунды, которые вам нужно будет удалить. - person Lloyd; 20.01.2013
comment
Этот код выдает ошибку времени выполнения: System.FormatException: «Входная строка имеет неверный формат». - person Vlad Rudenko; 13.10.2020

Этот код:

var timeSpan = new TimeSpan(2, 30, 0);
Console.WriteLine(new DateTimeOffset(2000, 1, 1, 1, 1, 1, timeSpan).ToString("zzz"));
Console.WriteLine(new DateTimeOffset(2000, 1, 1, 1, 1, 1, -timeSpan).ToString("zzz"));

выходы:

+02:30
-02:30
person Vlad Rudenko    schedule 13.10.2020