Datetimes и .NET с SQLite - PullRequest
       1

Datetimes и .NET с SQLite

1 голос
/ 12 ноября 2011

У меня есть таблица:

CREATE TABLE [Lines] (
[Value] TEXT  NOT NULL,
[AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL
)

Как видите, столбец AddedOn является меткой времени и настроен на запись текущей даты и времени, если она не указана во время вставки.

Пожалуйста, рассмотрите следующий код c #:

using (var cmd = conn.CreateCommand())    
{
    cmd.CommandText = "INSERT INTO Lines(Value) VALUES (@Value)";
    cmd.Parameters.AddWithValue("@Value", objectValue);
    cmd.ExecuteNonQuery();
}    

Обратите внимание, что выше я позволяю SQLite назначать дату.Теперь тот же код, за исключением того, что я передаю значение AddedOn (например, DateTime.Now - прямо сейчас)

using (var cmd = conn.CreateCommand())    
{
    cmd.CommandText = "INSERT INTO Lines(Value, AddedOn) VALUES (@Value, @AddedOn)";
    cmd.Parameters.AddWithValue("@Value", objectValue);
    cmd.Parameters.AddWithValue("@AddedOn", DateTime.Now);

    cmd.ExecuteNonQuery();
}

Если я тогда сравниваю результаты этих 2 вставок, я обнаруживаю, что когда я позволяю AddedOnпинка по умолчанию (первый пример), она сохранила текущую дату и время по Гринвичу.Когда я передал дату в явном виде (2-й пример), она сохранила текущую дату и время в моем часовом поясе.

Это сделано специально?Это ошибка?Кажется, что поведение должно быть согласованным, а дата и время, которые я передаю, должны быть преобразованы в GMT.

1 Ответ

4 голосов
/ 12 ноября 2011

Это ошибка?

Не уверен, но я бы больше удивился, если бы этот не достиг вашей цели:

cmd.Parameters.AddWithValue("@AddedOn", DateTime.UtcNow);

Для меня поведение, которое вы испытываете, имеет смысл.

Я бы не подумал, что в столбце TIMESTAMP будет какая-либо информация о том, ожидается ли время в UTC или нет, иЯ, конечно, не ожидал, что по умолчанию будет принудительно установлен UTC.

Это также улучшит производительность, поскольку преобразование часовых поясов (относительно) дорого, а автоматическое преобразование будет скрытым механизмом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...