Существует ли стандартный формат даты / времени, который можно передать по URL? - PullRequest
19 голосов
/ 27 февраля 2010

При просмотре документации DateTimeFormatInfo выясняется, что во всех стандартных форматах есть двоеточия, что делает передачу их по URL неприятной / невозможной.

Существует ли стандартизированный формат для передачи даты и времени по URL, предпочтительно тот, который может быть автоматически проанализирован .NET?


Обновление: Небольшое уточнение

Потребителем этих данных будет какой-то веб-сервис - это будет либо простой HTTP GET с этим значением в строке запроса, либо REST со значением в URL где-либо.

ISO 8601 регулирует форматирование даты / времени, и согласно статье в вики, использование ToString("yyyyMMddTHHmmssZ") должно соответствовать стандартам как минимум. К сожалению, ASP.NET MVC не получает его автоматически (еще ничего не пробовал). Несмотря на это, ASP.NET MVC также не будет автоматически конвертировать тики в дату и время, что меня удивило.

Ответы [ 8 ]

8 голосов
/ 27 февраля 2010

Я соберу все в один ответ:

Вы могли бы сделать что-то вроде этого:

        string urlSafeDateString = HttpServerUtility.UrlTokenEncode(date.ToUniversalTime().ToString(System.Globalization.CultureInfo.InvariantCulture).ToCharArray());

        DateTime date = DateTime.Parse(new string(HttpServerUtility.UrlTokenDecode(urlSafeDateString)), System.Globalization.CultureInfo.InvariantCulture).ToLocalTime();

Или вы можете сделать что-то вроде этого:

        string urlSafeDateString = date.ToUniversalTime().ToString("yyyyMMddTHHmmss", System.Globalization.CultureInfo.InvariantCulture);

        DateTime date = DateTime.ParseExact(urlSafeDateString, "yyyyMMddTHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToLocalTime();
4 голосов
/ 27 февраля 2010

Да. ISO 8601

http://en.wikipedia.org/wiki/ISO_8601

Просто убедитесь, что вы URLEncode, чтобы иметь дело с двоеточиями.

3 голосов
/ 27 февраля 2010

Это, вероятно, не является частью какого-либо стандарта или чего-то подобного, но вы всегда можете использовать Unix timestamp , поскольку они содержат только цифры. См. эту статью , чтобы узнать, как преобразовать ее в .NET DateTime.

2 голосов
/ 27 февраля 2010

На самом деле у нас есть решение для создания отчетов, в котором даты и время могут быть переданы в виде простых текстовых значений CCYYMMDD и hhmmss, а затем, когда код должен что-то сделать с этими значениями, он просто использует строковые операции для их возврата в формат, который можно отобразить или легко проанализировать (например, форматы DB2 ISO CCYY-MM-DD или hh.mm.ss).

Результат читабелен, и я был бы удивлен, если бы в .NET не было инструкций по обработке строк, которые могли бы сделать это легко.

1 голос
/ 12 марта 2018

Я только что столкнулся с этой же проблемой и решил ее с помощью следующего вспомогательного метода:

    private string Encode(DateTime date)
    {
        var formattedDate = date.ToString("yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
        return WebUtility.UrlEncode(formattedDate);
    }

После использования вывода в параметре запроса URL-адреса значение правильно десериализуется .NET в объекты DateTime, переданные в мою службу Web API.

1 голос
/ 27 февраля 2010

Несмотря на это, ASP.NET MVC также не будет автоматически конвертировать тики в дату, что меня удивило.

Существует конструктор для DateTime, который принимает количество тиков:

 DateTime d = new DateTime(634028202671420663);

Существует также переопределение, которое позволяет отображать это время по местному или UTC. Это все в документах: http://msdn.microsoft.com/en-us/library/system.datetime.datetime.aspx

Редактировать: понял из формулировки поста, что, возможно, вы говорите о ASP, преобразовывающем тики автоматически в DateTime, вместо того, чтобы читать числовой параметр. Может быть! : -)

1 голос
/ 27 февраля 2010

Если вам нужны дата и время, я бы использовал DateTime.Ticks .

Если вам нужна только дата, используйте HttpServerUtility.UrlEncode (date.ToShortDateString ()) .

Обновление: Рик Страл ранее обсуждал эту проблему и предложил решение на своем блоге .

1 голос
/ 27 февраля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...