web-dev-qa-db-fra.com

Date Javascript à C # via Ajax

J'ai un objet date javascript qui me donne une chaîne de date dans ce format, "mer 16 déc 00:00:00 UTC-0400 2009".

Je passe cela via Ajax au serveur (ASP.NET c #)

Comment convertir "mercredi 16 décembre 00:00:00 UTC-0400 2009" en objet DateTime C #. Echec de DateTime.Parse.

31
BahaiResearch.com

Vous pouvez utiliser DateTime.ParseExact qui vous permet de spécifier une chaîne de format à utiliser pour l'analyse:

DateTime dt = DateTime.ParseExact("Wed Dec 16 00:00:00 UTC-0400 2009",
                                  "ddd MMM d HH:mm:ss UTCzzzzz yyyy",
                                  CultureInfo.InvariantCulture);
52
dtb

Le moyen le plus fiable serait d'utiliser des millisecondes depuis l'époque. Vous pouvez facilement obtenir ceci en JavaScript en appelant Date.getTime(). Ensuite, en C #, vous pouvez le convertir en un DateTime comme ceci:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);

Vous devez multiplier par 10 000 pour convertir les millisecondes en "ticks", qui correspondent à 100 nanosecondes.

30
EMP

Cela peut ne pas être possible dans votre cas, mais je recommande vivement de mettre à jour le code JS pour transmettre les dates et heures au format ISO 8601. http://en.wikipedia.org/wiki/ISO_8601

ISO 8601 n’est pas seulement la norme formelle, il est également facile à utiliser et évite beaucoup de tracas dans le fuseau horaire!

Pour obtenir 8601 chaînes datetime en Javascript:

var d = new Date();
var iso_time = d.toISOString(); //"2014-05-06T18:49:16.029Z"

Pour lire les chaînes 8601 datetime en C #:

DateTime d = DateTime.Parse(json_string);
22
Hovis Biddle

Juste pour la postérité, pour aider les futurs camarades Googlers, je voudrais développer la réponse d'EMP.

La réponse de EMP indique le temps passé en UTC (si c'est ce que vous cherchez, utilisez-le).

Pour arriver à la heure locale du client en C #:

En JavaScript:

        var now = new Date();
        var UTC = now.getTime();
        var localOffset = (-1) * now.getTimezoneOffset() * 60000;
        var currentTime = Math.round(new Date(UTC + localOffset).getTime()); 

En C #: 

        DateTime currentTimeDotNet = new DateTime(1970, 1, 1).AddTicks(Convert.ToInt64(currentTime) * 10000);

Nous remercions ce blog et la réponse d'EMP, mais avons pris des essais et des erreurs des deux côtés pour bien faire les choses, alors venez-en pour les futurs citoyens.

5
RJB

Pour être honnête, je n’essaierais pas d’analyser cette chaîne de date en C #, j’essayerais personnellement de créer une structure de date plus utile à partir de votre objet de date javascript.

Par exemple, vous pouvez utiliser parse() en javascript pour renvoyer le ms représentant l'objet date, que vous pouvez utiliser DateTime.Parse() on pour convertir en objet C # DateTime.

0
Jay