Необходимо сохранить временную метку с часовым поясом в базе данных. Целевое поле в таблице объявлено как
"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» перед выполнением запроса в моем случае не сработал. Заранее спасибо за любые решения.