Сравнение значений SQL и Dateite TimeTime EQUAL приводит к ложному C # - PullRequest
0 голосов
/ 02 апреля 2019

Создаю запись 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 * From 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 Ответ

0 голосов
/ 02 апреля 2019

Хорошо, это произошло из-за точности в миллисекундах между DateTime и DateTime2, где DateTime2 имеет более 3 разрядов после секунды, а при преобразовании в DateTime он округлялся вверх / вниз, в результате чего значения не были равны.

Я обрезал две даты:

DateTime date1 = _object.Modified.AddTicks(-_object.Modified.Ticks % TimeSpan.TicksPerSecond);

и то же самое для другой даты.

Я не получаю более точного результата, поэтому я в порядке. Однако не все будут удовлетворены.

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