2015-07-17 7 views
2

Мы внедряем PostgreSQL и также решили использовать NodaTime вместо стандартного .NET DateTime. PostgreSQL имеет тип «метка времени с часовым поясом», а NodaTime возвращает значение даты и времени с часовым поясом через метод SystemClock.Instance.Now. Однако значение, возвращаемое SystemClock.Instance.Now (2015-07-17T13: 22: 52Z), напрямую не записывается в поле PostgreSQL. Существует ли наилучшая практика для работы с реализациями NodaTime/PostgreSQL?Каков наилучший способ хранения значений NodaTime в PostgreSQL?

ответ

3

Из-за того, что я понимаю, «временная метка с часовым поясом» в любом случае является ошибочным - это просто «вы предоставляете часовой пояс с локальным значением, PostgreSQL будет хранить UTC» ... другими словами, это действительно дополнительное преобразование а не хранить больше данных.

Если вы пытаетесь сохранить Instant, тогда timestamp должно быть в порядке, как тип данных. С точки зрения получения значения в базе данных, вы должны, скорее всего, просто преобразовать его в DateTimeOffset и позволить драйверу справиться с этим. Вы будете использовать Instant.ToDateTimeOffset при хранении и Instant.FromDateTimeOffset при извлечении.

+0

Спасибо, @Jon, ты меня на правильном пути. У Instant не появляется метод ToDateTimeOffset (у него есть метод FromDateTimeOffset), но SystemClock.Instance.Now.ToDateTimeOffset() сделал трюк. Однако я могу попытаться убедить команду просто хранить мгновенные значения. – TortillaCurtain

+0

@TortillaCurtain: Я не с тобой. Что заставляет вас думать, что «Мгновенный» не имеет «ToDateTimeOffset»? Как работает 'SystemClock.Instance.Now.ToDateTimeOffset()', если это не так? И что вы подразумеваете под «просто хранить значения« Instant »? –

+0

Я набрал' Instant' и попытался ввести 'ToDateTimeOffset', и он не отображался в списке методов. Если бы я заставил его просто набрать его, как 'Instant.ToDateTimeOffset()', я получаю сообщение об ошибке при доступе к нестационарному методу в статическом контексте. Сохраняя мгновенные значения, я думал о простом использовании длинного целочисленного поля и сохранении необработанного значения Ticks из 'Instant'. – TortillaCurtain