У меня есть база данных Sql, которая содержит поле даты.Utc Сохранение даты как локальная дата в Sqlite
Я использую Щеголеватый для обновления базы данных следующим образом:
const string sql = "UPDATE AdminDb.Users " +
"SET IsLoggedOn = 1, LastLoggedOn = @LastLoggedOn " +
"WHERE Username = @username";
var date = DateTime.UtcNow;
DatabaseConnectionBase.DatabaseConnection.Execute(sql, new { username, LastLoggedOn = date });
Я найти к моему большому неудовольствию при дроблении до фактического обновления, переменная дата читает 30/3/2015 9:32:54 однако, когда я запускаю обновление базы данных сохраняет дату как 30/3/2015 10:32:54
Как вчера Великобритания изменился с GMT в BST (UTC +1), я уверен, что база данных кажется чтобы попытаться компенсировать это, поскольку этот вопрос никогда не возникал раньше.
Я думал, что я предотвратил эту проблему, используя свойство DateTime.UtcNow для сохранения моей даты.
Это вызывает серьезные проблемы при проверке пользователей.
- Уверен, что это не мой код, поскольку дата верна в методе Dapper Execute.
- Я не могу понять, почему Dapper попытается компенсировать, так как большинство разработчиков будут кричать на такую функциональность.
- Это приводит меня к выводу, что это должно быть что-то в Sqlite, которое вызывает эту проблему. Возможно, есть прагма, которую мне нужно бежать?
Согласно предложению с другого сайта я пытался форматировать дату следующим образом:
var date = DateTime.UtcNow.ToString("o");
Намерение в том, чтобы заставить дату в формате ISO-8601, но у меня не было никакой удачи с этим.
У кого-нибудь есть идеи?
Где эта база данных точно? На вашей локальной машине? Или другой сервер? Вы отлаживали свой код и видели, что именно возвращает DateTime.UtcNow? –
Да, я отлаживал свой код, переменная date считывает правильную дату UTC до тех пор, пока я вижу ее до тех пор, пока она не войдет в метод Dapper Execute. База данных находится на удаленном сервере –