2010-02-26 3 views
14

regardant la documentation DateTimeFormatInfo, il semble que tous les formats standard ont en eux côlons, ce qui les rend le passage sur une url désagréable/impossible.Existe-t-il un format de date/heure standard pouvant être transmis sur une URL?

Y at-il un format standardisé pour faire passer une datetime sur une URL, de préférence un qui peut être analysé automatiquement par .NET?


Mise à jour: Une petite précision

Le consommateur de ces données va être service web d'une sorte - il va être soit simple HTTP GET avec cette valeur dans la chaîne de requête, ou Ce sera REST avec la valeur dans l'URL quelque part.

ISO 8601 régit la mise en forme de la date et de l'heure, et selon l'article wiki, l'utilisation de ToString("yyyyMMddTHHmmssZ") devrait au moins être conforme aux normes. Malheureusement, ASP.NET MVC ne le récupère pas automatiquement (vous n'avez encore rien essayé). Pour ce que ça vaut, ASP.NET MVC ne convertira pas non plus automatiquement les ticks en datetime, ce qui m'a surpris.

Répondre

7

Je vais mettre tout en une seule réponse:

Vous pouvez faire quelque chose comme ceci:

 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(); 

Ou vous pourriez faire quelque chose comme ceci:

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

     DateTime date = DateTime.ParseExact(urlSafeDateString, "yyyyMMddTHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToLocalTime(); 
+0

Ceci est assez proche de ce que j'utilise pour le moment. –

2

Il est probablement pas partie d'une norme ou quelque chose comme ça, mais vous pouvez toujours utiliser un Unix timestamp que ces chiffres ne contiennent que. Voir this article pour les moyens de le convertir en .NET DateTime.

1

Nous avons en fait une solution de reporting où les dates et heures peuvent être passés en tant que texte brut CCYYMMDD et hhmmss valeurs alors, lorsque le code doit tout faire pour ces valeurs, utilise simplement les opérations de chaîne pour les restituer dans un format qui peut être affiché ou facilement analysé (comme les formats ISO DB2 CCYY-MM-DD ou hh.mm.ss).

Le résultat est lisible et je serais surpris si .NET n'avait pas des instructions de manipulation de chaîne qui pourrait le faire facilement.

0

Si vous avez besoin de la date et l'heure, j'utiliser DateTime.Ticks.

Si vous avez seulement besoin de la date, utilisez HttpServerUtility.UrlEncode(date.ToShortDateString()).

Mise à jour: Rick Strahl a discuté de cette question avant et a offert une solution sur his blog.

+0

Assurez-vous d'utiliser le InvariantCulture (sur le client et le serveur) ou cette travailler/échouer au hasard pour différents utilisateurs! –

+0

HtmlEncode? cela se passe sur une url ... –

+0

Je l'ai changé pour UrlEncode. – jrummell

3

Oui. ISO 8601

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

Assurez-vous que vous UrlEncode à traiter les colons.

+0

Je reçois un 'HTTP 400 BAD REQUEST' quand j'utilise UrlEncode, et aussi si je le fais deux fois. –

0

Pour ce que ça vaut, ASP.NET MVC ne convertira pas non plus automatiquement les ticks en datetime, ce qui m'a surpris.

Il y a un constructeur pour DateTime qui prend le nombre de tiques:

DateTime d = new DateTime(634028202671420663); 

Il y a aussi un remplacement qui vous permet de mapper que soit l'heure locale ou UTC. Il est dans les docs: http://msdn.microsoft.com/en-us/library/system.datetime.datetime.aspx

Edit: réalisé du libellé du poste que peut-être vous parlez ASP convertissant les tiques automatiquement à un DateTime, plutôt que d'avoir à lire le paramètre numérique. Peut-être! :-)

+0

Oui, j'espérais trouver un format qui fonctionnerait automatiquement (pour une utilisation avec une reliure de modèle) –

Questions connexes