Как контролировать появление ':' в смещении часового пояса при разборе / форматировании Datetime - PullRequest
11 голосов
/ 09 марта 2011

Я работаю с протоколом, который может дополнительно включать смещение часового пояса при указании даты и времени. Мой код написан на C #, и мы используем среду выполнения 4.0 .NET. Я вижу, что есть опция форматирования "zzz" для включения информации о часовом поясе при разборе и форматировании, однако, похоже, что двоеточие (:) исправлено. Например, Datetime, отформатированный с помощью строки пользовательского формата (yyyyMMddHHmmsszzz), может выглядеть как:

20100309101530-05: 00

Протокол, с которым я работаю, не включает двоеточие в смещение часового пояса. Этот протокол будет форматировать datetime и ожидать, что они будут отформатированы как:

20100309101530-0500

Есть ли способ управления внешним видом двоеточия при разборе или форматировании даты и времени с помощью специального средства форматирования, которое включает смещение часового пояса?

Ответы [ 3 ]

10 голосов
/ 09 марта 2011

Не похоже, что есть что-то встроенное (вы можете использовать zz, но это не учитывает минуты).

Вы можете бросить свой собственный, создав DateTimeFormatInfo, установив TimeSeparator в string.Empty и используя его в качестве IFormatProvider при вызове DateTime.ToString (и сделайте вызов явным, если это еще не сделано).

Но, честно говоря, используя Replace удалить нежелательное значение : из возвращаемого по умолчанию значения намного проще.

5 голосов
/ 13 мая 2013

Я столкнулся с той же проблемой, в конечном итоге с использованием расширения

    public static class DateTimeExtensions
    {        
        public static String ToSomeFormat(this DateTimeOffset dateTime)
        {
            return dateTime.ToString("yyyyMMddHHmmsszzz").Replace(":", "");
        }
    }
2 голосов
/ 14 февраля 2019

Если вы используете его в месте, где нет смысла использовать замену или расширение (например, что-то, что может потребоваться вывести как -05:00 с двоеточием при передаче как zzz) и минуты Неважно, что вы могли бы подделать его с zz00.

var date = new DateTimeOffset(2008, 8, 1, 0, 0, 0, new TimeSpan(-5, 0, 0));
Console.WriteLine(date.ToString("yyyy-MM-dd-HH:mm:ss(zz00)"));
// outputs 2008-08-01-00:00:00(-0500)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...