Существует ли стандартный формат даты/времени, который может быть передан по URL-адресу?
Глядя на документацию DateTimeFormatInfo, похоже, что у всех стандартных форматов есть двоеточие, что позволяет передавать их по URL-адресу неприятный/невозможно.
Существует ли стандартизированный формат для передачи даты и времени на URL-адрес, предпочтительно тот, который может автоматически анализироваться .NET?
Обновление: Небольшое уточнение
Потребитель этих данных будет каким-то веб-сервисом - он будет либо простым HTTP GET с этим значением в querystring, либо он будет REST со значением в URL-адресе где-то.
ISO 8601 регулирует форматирование даты и времени, и, согласно статье wiki, использование ToString("yyyyMMddTHHmmssZ")
должно соответствовать стандартам, по крайней мере. К сожалению, он не получает автоматически ASP.NET MVC (еще ничего не пробовал). Для чего это стоит, ASP.NET MVC не будет автоматически конвертировать тики в datetime, что меня удивило.
Ответы
Ответ 1
Я соберу все вместе в один ответ:
Вы можете сделать что-то вроде этого:
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();
Ответ 2
Да. ISO 8601
http://en.wikipedia.org/wiki/ISO_8601
Просто убедитесь, что вы URLEncode, чтобы иметь дело с двоеточиями.
Ответ 3
Он, вероятно, не является частью какого-либо стандарта или что-то в этом роде, но вы всегда можете использовать Unix timestamp, поскольку они содержат только цифры. См. эту статью о способах ее преобразования в .NET DateTime.
Ответ 4
На самом деле у нас есть решение для отчетов, в котором даты и время могут передаваться в виде текстовых значений CCYYMMDD
и hhmmss
, тогда, когда код должен что-либо делать с этими значениями, он просто использует операции со строками, чтобы вернуть их обратно в формат, который может отображаться или легко анализироваться (например, в форматах DB2 ISO CCYY-MM-DD или hh.mm.ss).
Результат доступен для чтения, и я был бы удивлен, если бы у .NET не было инструкций по обработке строк, которые могли бы сделать это легко.
Ответ 5
Try
HttpServerUtility.HtmlEncode
а также
HttpServerUtility.HtmlDecode
Ответ 6
Если вам нужны дата и время, я бы использовал DateTime.Ticks.
Если вам нужна только дата, используйте HttpServerUtility.UrlEncode(date.ToShortDateString()).
Обновление: Рик Страл ранее обсуждал этот вопрос и предложил решение его блог.
Ответ 7
Для того, что стоит, ASP.NET MVC не будет автоматически конвертировать тики в datetime, что меня удивило.
Здесь есть конструктор для DateTime, который принимает количество тиков:
DateTime d = new DateTime(634028202671420663);
Также существует переопределение, которое позволяет сопоставить это как с локальным, так и с UTC. Все это в документах: http://msdn.microsoft.com/en-us/library/system.datetime.datetime.aspx
Изменить: реализовано из формулировки сообщения, что, возможно, вы говорите об ASP, автоматически преобразуя тики в DateTime, вместо того, чтобы читать числовой параметр. Может быть!: -)