Ten weekend jest wyjątkowo długi, ponieważ po 23:59:59
wstawiony zostanie 30 czerwca.Przechowywanie sekundy przestępnej w SQL Server 2008
Mamy system, który rejestruje wiele danych przez całą dobę, a jedną z reguł biznesowych jest to, że nie można rejestrować dwóch rekordów jednocześnie w ciągu jednej sekundy.
Korzystamy z dat danych UTC wraz z nowym typem danych datetimeoffset
, ale z tego co wiem, nie pozwalają one na więcej niż 60 sekund na minutę.
Oczywiście, to zgłasza błąd:
select datediff(ss, getdate(), '30-jun-2012 23:59:60')
Ale według bogów UTC będzie to w czasie rzeczywistym. Wydarzenia mogą mieć miejsce pod numerem 23:59:60
, ale nie mamy możliwości zarejestrowania tego faktu.
23:59:59
plus jedna sekundowa offset będzie nadal uznawana za 00:00:00
1 lipca.
Jak poprawnie zalogować, że zdarzenie miało miejsce w 23:59:60
w bazie danych?
Wygląda na to, że reguły biznesowe ignorują rzeczywistość. –
Jak to zrobić? Rejestrowane zdarzenia nie mogą fizycznie wystąpić więcej niż raz na sekundę. Nie wiedziałem też, że pracujesz nad tym samym projektem. – Widor
Mówiłem żartem, ale rzeczywistość jest taka, że system nie może przechowywać znacznika czasu dla sekundy przestępnej, dlatego nie jest możliwe rejestrowanie jednego zdarzenia na sekundę podczas sekundy przestępnej. Reguły biznesowe wymagają czegoś, czego nie można łatwo osiągnąć za pomocą tradycyjnych środków. Przemyśl zasady, zrób wyjątek dla sekund przestępnych lub napisz szalony jednorazowy kod. –