#c# #sql-server #sqlite #datetime #uwp
#c# #sql-server #sqlite #datetime #uwp
Вопрос:
Я создаю запись SQLite с DateTime.UtcNow.
Затем я преобразую DateTime следующим образом:
var format = "yyyy-MM-ddTHH:mm:ss:fff";
var ModifiedString = _object.Modified.ToString(format);
var ModifiedFormatted = DateTime.ParseExact(ModifiedString, format, CultureInfo.InvariantCulture);
Это значение вставляется в SQL вместе с данными другой записи:
sqlCmd.Parameters.Add("@Modified", System.Data.SqlDbType.DateTime2).Value = ModifiedFormatted;
Затем я запрашиваю запись и снова сравниваю SQLite с SQL, чтобы проверить, совпадает ли значение DateTime (для тестирования оно одинаковое). Я получаю результат, в котором значения не равны:
Я использую Select * Из TableName и:
_dbobject.Modified = Convert.ToDateTime(dr["Modified"]);
Сравнение выполняется просто следующим образом:
if (_object.Modified < _dbobject.Modified)
{
//update local
} else if (_object.Modified > _dbobject.Modified)
{
//update online
} else
{
//do nothing
}
Локальные или онлайновые записи не были изменены за это время, но это всегда приводит к тому, что локальные находятся>, чем онлайн.
Я что-то упускаю?
Комментарии:
1. «Затем я запрашиваю запись и снова сравниваю SQLite с SQL» Я предполагаю, что если вы говорите,
"SQL"
я предполагаю, что вы имеете в видуSQL Server
(MSSQL), а не MySQL?2. Да, я ввел это неправильно
3. Также вы должны использовать DateTime. Compare() а не «простые» операторы сравнения для сравнения строк datetime.. Поскольку это должно быть более безопасным.
4. Почему вы конвертируете
_object.Modified
в первую очередь?5. о, я этого не понимаю. Я сразу же попробую
Ответ №1:
Хорошо, значит, это произошло из-за миллисекундной точности между DateTime и DateTime2, где DateTime2 имеет более 3 позиций после секунды, и во время преобразования в DateTime оно округлялось вверх / вниз, что приводило к неравенству значений.
Я обрезал две даты на:
DateTime date1 = _object.Modified.AddTicks(-_object.Modified.Ticks % TimeSpan.TicksPerSecond);
и то же самое для другой даты.
Я не могу привести более точный результат, чем этот, поэтому я в порядке. Однако не все были бы удовлетворены.