De nombreuses réponses indiquent ici le stockage au format UTC. Mais soyez très prudent avec ça. Par exemple, si vous planifiez un rendez-vous à midi mais que le rendez-vous a lieu après le passage à l'heure d'été, que se passera-t-il? UTC ne conserve aucune information indiquant si dst était actif lorsque le rendez-vous a été enregistré. Beaucoup de grands systèmes célèbres ont fait cette erreur, où un utilisateur envoie un e-mail à 9 heures du matin en été, puis en hiver, l'heure d'envoi indique 8 heures, car le calcul de retour à partir de l'UTC dépend du moment où vous regardez l'heure, pas allumé lorsque le datetime a été enregistré.
Il vaut mieux supposer que votre utilisateur souhaite toujours avoir les heures qu'il a choisies. Aucune conversion UTC, aucune conversion de temps, aucune information de fuseau horaire, rien. Prendre rendez-vous de 08h00 à 12h00 le 21 mars 2016, c'est tout. N'utilisez pas l'heure locale ou l'heure UTC, mais l'heure non spécifiée (dans json, cela n'a ni z ni +, en gros, dans .NET, cela a DateTime.Kind = DateTimeKind.Unspecified).
Bien sûr, si votre cas d'utilisation est que vous êtes une entreprise qui tient des réunions avec quelqu'un de différents fuseaux horaires et que vous souhaitez voir ces informations dans, disons, un calendrier d'entreprise, mais permettre aux utilisateurs de voir quelle heure se trouve dans leur fuseau horaire, il devient plus compliqué. L'heure doit être correcte pour différentes personnes dans différents fuseaux horaires (le fournisseur et le client).
Dans ces cas, vous pouvez même vouloir enregistrer quand le rendez-vous a été enregistré dans la base de données, dans quel fuseau horaire et si cela inclut dst ou non. De cette façon, vous pouvez toujours calculer l'heure locale à autre chose, à ce qu'elle serait maintenant ou à ce qu'elle était censée être historiquement. Parce que les fuseaux horaires ne sont pas statiques, ce qui complique encore les choses.
Heureusement, c'est là que des bibliothèques comme http://nodatime.org/ interviennent et sont fortement recommandées. Ils travaillent avec des dates beaucoup plus régulièrement. Même dans ce cas, je recommanderais d'encapsuler toutes vos variables datetime et votre logique dans vos propres wrappers, en utilisant des interfaces afin qu'elles puissent être moquées, et vous pourrez alors changer de logique plus tard.