@@ -472,6 +472,8 @@ def make_tasks_sql_query(where_predicate=None, order_predicate=None):
472
472
where_predicate = where_predicate or "TRUE"
473
473
order_predicate = order_predicate or 'TASK."index"'
474
474
475
+ # Note: see remark at `make_date_filter()` as for why the first
476
+ # two `date()` statements have no "localtime" modifier.
475
477
return f"""
476
478
SELECT DISTINCT
477
479
TASK.uuid,
@@ -519,8 +521,8 @@ def make_tasks_sql_query(where_predicate=None, order_predicate=None):
519
521
CASE
520
522
WHEN CHECKLIST_ITEM.uuid IS NOT NULL THEN 1
521
523
END AS checklist,
522
- date(TASK.startDate, "unixepoch", "localtime" ) AS start_date,
523
- date(TASK.{ DATE_DEADLINE } , "unixepoch", "localtime" ) AS deadline,
524
+ date(TASK.startDate, "unixepoch") AS start_date,
525
+ date(TASK.{ DATE_DEADLINE } , "unixepoch") AS deadline,
524
526
date(TASK.stopDate, "unixepoch", "localtime") AS "stop_date",
525
527
datetime(TASK.{ DATE_CREATED } , "unixepoch", "localtime") AS created,
526
528
datetime(TASK.{ DATE_MODIFIED } , "unixepoch", "localtime") AS modified,
@@ -648,14 +650,14 @@ def make_date_filter(date_column: str, value) -> str:
648
650
649
651
Examples
650
652
--------
651
- >>> make_date_filter('start_date ', True)
653
+ >>> make_date_filter('startDate ', True)
652
654
'AND start_date IS NOT NULL'
653
655
654
- >>> make_date_filter('start_date ', False)
656
+ >>> make_date_filter('startDate ', False)
655
657
'AND start_date IS NULL'
656
658
657
- >>> make_date_filter('start_date ', 'future')
658
- "AND date(start_date , 'unixepoch', 'localtime ') > date('now', 'localtime')"
659
+ >>> make_date_filter('startDate ', 'future')
660
+ "AND date(startDate , 'unixepoch') > date('now', 'localtime')"
659
661
660
662
>>> make_date_filter('created', None)
661
663
''
@@ -669,7 +671,12 @@ def make_date_filter(date_column: str, value) -> str:
669
671
670
672
# compare `date_column` to now.
671
673
validate ("value" , value , ["future" , "past" ])
672
- date = f"date({ date_column } , 'unixepoch', 'localtime')"
674
+ # Note: not using "localtime" modifier on `date()` since Things.app
675
+ # seems to store `startDate` and `dueDate` as a 00:00 UTC datetime.
676
+ # Morever, note that `stopDate` -- contrary to its name -- seems to
677
+ # be stored as the full UTC datetime of when the task was "stopped".
678
+ # See also: https://github.com/thingsapi/things.py/issues/93
679
+ date = f"date({ date_column } , 'unixepoch')"
673
680
operator = ">" if value == "future" else "<="
674
681
now = "date('now', 'localtime')"
675
682
0 commit comments