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