2010-11-01 7 views
5

J'ai un site où les utilisateurs peuvent écrire des articles. Les utilisateurs peuvent être de partout dans le monde, donc quand ils publient, je stocke la date affichée en tant que DateTime.UtcNow. J'utilise le plugin JQuery il y a longtemps pour afficher le dat posté similaire au débordement de pile (il y a 1 min etc ...) Mais je ne suis pas sûr de savoir comment convertir à ce jour j'ai stocké dans le système l'heure locale des utilisateurs? Voici ce que je me sers:C# UTC aux utilisateurs Heure locale

public static MvcHtmlString ConvertToLocalTime(this HtmlHelper htmlHelper, DateTime date) 
    { 
     DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse(date.ToString()),DateTimeKind.Utc); 
     return MvcHtmlString.Create(convertedDate.ToLocalTime().ToString()); 
    } 

Cela voit convertir le temps aux serveurs heure locale, mais je besoin pour les utilisateurs, heure locale. Qu'est-ce que je fais mal? J'utilise .NET MVC 2 et .NET 4.0

Répondre

10

En général, vous ne connaîtrez pas le fuseau horaire exact de l'utilisateur côté serveur. Au lieu d'essayer de convertir à l'heure locale de l'utilisateur côté serveur, envoyez l'heure au client en UTC et demandez au client de convertir l'heure. Le plugin TimeAgo fait automatiquement aussi longtemps que vous lui donnez le temps en format ISO8601:

<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr> 

Le Z à la fin de l'horodatage est importante; cela signifie UTC.

+0

Merci pour votre aide! J'utilise AJAX pour poster et je me demandais si TimeAgo fonctionne avec .Live? – Paul

+8

fait intéressant - le Z à la fin est ce qui lui donne son nom commun, "temps Zulu" :) – MattDavey

Questions connexes