Защо не съхранявате UTC в DB на първо място? В повечето случаи DateTime
трябва да се съхранява в UTC, тъй като обикновено се отнася до момент от време. Това е вярно за всичко, което се отнася до времето във физически смисъл и всичко, което предполага, че времето е монотонно, нарастващо и уникално, нито едно от които не е вярно за повечето местни времена.
От време на време използването на местно време има смисъл:да предположим, че автобус тръгва всеки ден в 9 сутринта. Това означава, че между две последователни събития минават 24 часа. Ако обаче часовата зона има лятно часово време, това ще бъде 23-часов, съответно 25-часов интервал веднъж годишно.
Въпреки това, ако трябва да преборите този вид данни, просто DateTime
не върши работа; Правилата за DST могат да се променят, часовите зони могат да се променят и т.н. В C# правилата за DST, които ще се прилагат, са тези, които са текущи валидни, дори ако датата е „историческа“. Така аритметиката на датите с исторически дати може да предизвика хаос. Ако наистина трябва да се справите с това, най-малкото трябва да съхраните кой часова зона, в която е времето (не само отместването или дори само isLocal
флаг).
Съхраняването на текстова информация в базата данни, която може да се съхранява двоично, не ми се струва много елегантно, нито промяната на стойността в някакъв среден слой. Първото е неефективнои страда от споменатите по-горе особености на местното време, последното има само втория проблем.
Между другото, за да постигнете последното, можете да украсите свойството с [BsonDateTimeOptions(Kind=DateTimeKind.Local)]
, който ще направи преобразуването вместо вас, но страда от същите проблеми, разбира се.