Использование временной метки с часовым поясом с Npgsql

Необходимо сохранить временную метку с часовым поясом в базе данных. Целевое поле в таблице объявлено как

"UploadTime" timestamp with time zone

Я вставляю данные, используя параметры команды:

var uploadTime = DateTimeOffset.Now;
var insertQuery = @"INSERT INTO ""Table"" (""UploadTime"") VALUES :uploadTime"; 
var uploadTimeParam = new NpgsqlParameter("uploadTime", NpgsqlDbType.TimestampTZ);
uploadTimeParam.Value = uploadTime;
var insertCommand = new NpgsqlCommand(insertQuery, databaseConnection);
insertCommand.Parameters.Add(uploadTimeParam);

Значение сохраняется и возвращается как DateTime без часового пояса. Я предполагаю, что это потому, что тип базы данных «отметка времени с часовым поясом» по умолчанию сопоставляется с DateTime. Вероятно, это можно исправить, проверив исходники и внеся соответствующие изменения в TimestampTZ, но это будет мешать идее использования Nuget для управления зависимостями проекта. Может быть, есть какие-то менее сложные способы добиться этого? Хранение тиков и преобразование их в DateTimeOffset — это накладные расходы, хак с «SET TIME ZONE INTERVAL» перед выполнением запроса в моем случае не сработал. Заранее спасибо за любые решения.


person Jaded    schedule 06.02.2013    source источник


Ответы (1)


Проблема решена путем сохранения дополнительного поля RTT временной метки, которое вручную сопоставляется с DateTimeOffset.

person Jaded    schedule 05.03.2013
comment
пожалуйста, разверните больше поясните - person Mohsen Zahedi; 08.11.2020
comment
@MohsenZahedi Это было давно, но я думаю, что только что добавил второе поле (UploadTimeRTT) для необходимой даты и времени, которое было преобразовано в DateTimeOffset в коде приложения вручную, и сохранил их оба. Не очень эффективно с точки зрения проектирования схемы базы данных, но сработало. - person Jaded; 18.11.2020