Traiter avec les dates uniquement sur plusieurs fuseaux horaires dans .Net

StackOverflow https://stackoverflow.com/questions/79774

  •  09-06-2019
  •  | 
  •  

Question

Ok - une bouchée. Donc, le problème que j'ai est le suivant: je dois stocker une date d'expiration dans laquelle seulement la partie de date est requise et je ne souhaite pas de conversion de fuseau horaire. Ainsi, par exemple, si ma date d'expiration est définie sur "08 mars 2008" Je souhaite que cette valeur soit renvoyée à tout client, quel que soit son fuseau horaire. Le problème avec son transfert en tant que DateTime est qu'il est stocké / envoyé comme "08 mars 2008 00h00", ce qui signifie que pour les clients se connectant depuis n'importe quel fuseau horaire ouest de moi, il est converti et par conséquent basculé vers "07 mars 2008". Des suggestions pour gérer proprement ce scénario? De toute évidence, l'envoyer sous forme de chaîne fonctionnerait. rien d'autre ? Merci, Ian

Était-ce utile?

La solution

Vous pouvez créer une struct Date donnant accès aux détails souhaités / nécessaires, tels que:

public struct Date
{
    public int Month; //or string instead of int
    public int Day;
    public int Year;
}

Ceci est léger, flexible et vous donne un contrôle total.

Autres conseils

Je ne sais pas de quelle technologie de communication à distance vous faites référence, mais il s'agit d'un problème réel avec WCF, qui ne prend en charge que la sérialisation de DateTime au format xs: DateTime, inapproprié pour une valeur de date uniquement lorsque vous n'êtes pas intéressé. fuseaux horaires.

.NET 3.5 introduit le nouveau type DateTimeOffset, ce qui est utile pour transférer un DateTime entre les fuseaux horaires, mais n'aide pas avec le scénario de date uniquement.

Idéalement, WCF doit éventuellement prendre en charge xs: Date pour la sérialisation des dates comme demandé ici:

http://connect.microsoft.com/wcf/feedback /ViewFeedback.aspx?FeedbackID=349215

Je le fais comme ceci: chaque fois que j'ai une date en mémoire ou stockée dans un fichier, elle est toujours dans un DateTime au format UTC. Lorsque je montre la date à l'utilisateur, il s'agit toujours d'une chaîne. Lorsque je convertis entre la chaîne et DateTime, je procède également à la conversion du fuseau horaire.

Ainsi, je n'ai jamais à gérer les fuseaux horaires dans ma logique, mais uniquement dans la présentation.

Vous pouvez l'envoyer en tant qu'heure UTC

dateTime1.ToUniversalTime ()

Je pense que l'envoi en tant que chaîne d'horodatage serait le moyen le plus rapide / le plus simple, mais vous pouvez forcer un environnement local à arrêter la conversion de l'heure.

La méthode la plus simple que j'ai utilisée dans le passé pour les applications consiste simplement à stocker la date sous forme de chaîne au format aaaa-mm-jj. C'est sans ambiguïté et ne se traduit pas automatiquement par quoi que ce soit.

Oui, c'est pénible ...

Pourquoi ne l'envoyez-vous pas sous forme de chaîne, puis reconvertissez-le en un type de date si nécessaire? De cette façon, il ne sera pas converti sur différents fuseaux horaires. Restez simple.

Modifier: J'aime l’idée de Struct, elle permet une bonne fonctionnalité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top