Потому что вы выполняете сравнение строк. [Sqlite's = = не является меткой времени, это сравнивает две вещи для равенства]. Предположительно, ваше datetimeField хранится в виде String '1970-01-01T01: 00: 00', функции которого могут быть использованы с моментальным использованием sqlite, но в конце концов это строка, потому что sqlite doesn't have an intrinsic datetime тип
Обратите внимание, что все три из этих являются разные строки, и, таким образом, не будет возвращать верно для проверки равенства:
sqlite> select datetime(0,'unixepoch','localtime');
1969-12-31 16:00:00
sqlite> select datetime(0,'unixepoch','utc');
1970-01-01 08:00:00
sqlite> select '1970-01-01T01:00:00';
1970-01-01T01:00:00
sqlite>
для уточнения, простое решение этой проблемы заключается в преобразовании всего в другой формат, который вы уверены, что он может быть преобразован к, и легко сравнивать. Поскольку вы уже подвели его, мне очень нравятся эпохальные секунды. Учитывая ваши даты в течение одного часа после полуночи, на первое января 1970 года:
sqlite> select strftime('%s', '1970-01-01T01:00:00');
3600
sqlite>
Так что с вашего кода:
{stuff} WHERE 0 = strftime('%s', datetimeField)
и что было бы решение этой проблемы? – wutzebaer
Отредактировано мое сообщение, чтобы включить пример –