2010-09-17 2 views
1

je suivant le scénario:Lire un objet DateTime dans une zone horaire

USA: base de données & serveur d'applications

Europe client

Le serveur lit une fois la date (par exemple 12:00) objet de la base de données et l'envoyer à un client en Europe. Le problème est maintenant, le client affiche cette date dans le fuseau horaire du client (par exemple 18h00), mais nous avons besoin de l'heure dans la base de données, indépendamment du fuseau horaire du serveur. Sur le client, nous ne savons pas de quel fuseau horaire cette valeur est.

Alors, comment pouvons-nous y parvenir?

+1

Question connexe: http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone- meilleures pratiques – Oded

Répondre

1

Vous ne pouvez pas simplement utiliser DateTime.ToUniversalTime()?

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

Sinon, si vous ne voulez pas UTC, vous pouvez trouver le fuseau horaire de votre serveur et faire quelque chose comme:

DateTime dt; 
TimeZoneInfo timezone_EST = 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");  
DateTime dt_EST = TimeZoneInfo.ConvertTime(dt, timezone_EST); 
+0

Le problème de cette approche est, que je devrais itérer à travers une table de jeu de données avec 10k lignes pour ce faire. – Enyra

0

Si vous stockez les données DateTime dans SQL 2008, jetez un oeil à nouveau type datetimeoffset qui permettra de stocker les informations de fuseau horaire ainsi que la date et l'heure eux-mêmes

+0

Il ne stocke pas d'informations de fuseau horaire. Il stocke le décalage de l'UTC à ce moment précis. Ce sont des choses * très * différentes. Étant donné un instant UTC et un fuseau horaire, je saurais ce que l'heure locale serait cinq minutes plus tard. Étant donné un instant UTC et un décalage, je ne le ferais pas. –

+0

Malheureusement c'est SQL 2005 qui ne supporte pas encore cela. – Enyra

Questions connexes