Как я могу отформатировать объект TimeSpan
, чтобы он выглядел как смещение часового пояса, например:
+0700
or
-0600
Я использую GetUtcOffset, чтобы получить смещение, и оно работает, но возвращает объект TimeSpan.
Как я могу отформатировать объект TimeSpan
, чтобы он выглядел как смещение часового пояса, например:
+0700
or
-0600
Я использую GetUtcOffset, чтобы получить смещение, и оно работает, но возвращает объект TimeSpan.
Если вы используете .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
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);
Я добавляю +, когда число неотрицательно (для отрицательных чисел должно выводиться -).
Я думаю, вы могли бы использовать это:
String.Format("{0:zzz}", ts);
Этот код:
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