Comment s'assurer que toutes mes dates sont stockées en UTC sans passer par tout le code ? Cela doit-il être défini dans la base de données ? comment ? Merci.
Réponse
Trop de publicités?Dans une application Web, une date et heure non UTC peut entrer dans votre base de données de deux façons.
1) Vous l'avez fait. Cherche toutes les occurrences de DateTime.Now. Celles-ci doivent être DateTime.UtcNow. Néanmoins, une recherche et un remplacement ne suffiront pas, car vous devrez mettre à jour tous les endroits de votre code où vous affichez ces dates à vos utilisateurs pour les convertir en heure locale.
2) Votre utilisateur vous a envoyé une date/heure. Il n'y a pas de moyen automatique de les rechercher. Vous devez examiner manuellement chaque page que l'utilisateur peut utiliser pour transmettre une date/heure. Soit comme données à sauvegarder dans votre base de données, soit comme filtre à utiliser dans une requête. Vous devrez connaître leur décalage UTC et l'appliquer à ces occurrences avant de les utiliser.
Veillez à capturer le décalage UTC de l'utilisateur dès qu'il entre sur votre site. Pour l'instant, le seul moyen de le faire est d'utiliser le javascript. Si vous avez un point d'entrée unique (par exemple, une page de connexion), vous pouvez le faire à cet endroit. Sinon, vous devrez le faire dans votre page principale ou, si vous n'avez pas de page principale, dans chaque page sur laquelle l'utilisateur peut entrer.
Pour obtenir le décalage UTC en javascript, utilisez le code suivant :
var now = new Date();
int Offset = now.getTimezoneOffset()
Puis renvoyer le décalage au serveur. Là, vous pouvez créer deux fonctions pour gérer la conversion de/vers UTC.
Où UtcOffset contient le décalage javascript :
public static DateTime ConvertFromUtcToClientTime(DateTime utcDateTime)
{
return utcDateTime.AddMinutes(-UtcOffset);
}
public static DateTime ConvertFromClientTimeToUtc(DateTime clientDateTime)
{
return clientDateTime.AddMinutes(UtcOffset);
}