Dziwny problem. Generalnie ja się posługuję w aplikacji unixowymi timestampami - konwersję na normalny czas robię dopiero na froncie - przy prezentacji. Zwykle jak chce dodać znacznik, to robię tak:
DateTimeOffset dto = new DateTimeOffset(DateTime.UtcNow);
var data = dto.ToUnixTimeSeconds();
W ten sposób zapisuję to w bazie jako bigint, pobieram na froncie i wszystko działa. Natomiast tym razem dostaję w komunikacie z innego systemu timestamp w postaci DateTime
. Robię w ten sposób:
var ts = response.measurements[reg.Id].timeStamp.ToUniversalTime();
DateTimeOffset dto = new DateTimeOffset(ts);
reg.LastMeasured = dto.ToUnixTimeSeconds();
I tu pojawia się problem - timestamp jest przesunięty godzinę w przód. Jak oglądam zmienną dto pod debuggerem, to są tam dwa czasy - Time
i LocalTime
. Najwyraźniej funkcja konwertująca czas na Epoch pobiera wartość czasu lokalnego a ja za cholerę nie jestem w stanie go przymusić, żeby brał czas UTC.
Jakieś pomysły?