Hvorfor gemmer du ikke UTC i DB'en i første omgang? I de fleste tilfælde DateTime
skal gemmes i UTC, fordi det normalt refererer til et tidspunkt. Dette gælder for alt, der refererer til tid i fysisk forstand, og alt, der antager, at tiden er monotonisk, stigende og unik, hvoraf ingen er sande for de fleste lokale tider.
Nogle gange giver det mening at bruge lokale tider:antag, at en bus kører hver dag kl. 9.00. Det betyder, at der går 24 timer mellem to på hinanden følgende begivenheder. Men hvis tidszonen har en sommertid, vil det være et 23 timers henholdsvis 25 timers interval en gang om året.
Men hvis du har brug for at skændes med denne slags data, en simpel DateTime
gør ikke tricket; DST-regler kan ændre sig, tidszoner kan ændres osv. I C# er de DST-regler, der vil blive anvendt, dem, der er aktuelt gyldig, selvom datoen er 'historisk'. Datoregning med historiske datoer kan således skabe kaos. Hvis du virkelig har brug for at klare dette, bør du i det mindste gemme hvilke tidszone tiden er i (ikke kun forskydningen, eller endda bare en isLocal
flag).
Lagring af tekstinformation i databasen, der kan gemmes binært, virker ikke særlig elegant for mig, og det gør det heller ikke at ændre værdien i et eller andet mellemlag. Førstnævnte er ineffektiv og lider af de tidligere nævnte ejendommeligheder ved lokal tid, sidstnævnte har kun det 2. problem.
BTW, for at opnå det sidste, kan du dekorere ejendommen med [BsonDateTimeOptions(Kind=DateTimeKind.Local)]
, som vil gøre konverteringen for dig, men lider selvfølgelig af de samme problemer.