This allows to have queries like: after:10am after:"10:00 GMT" after:"now -2 hours" after:"2 hours ago" after:yesterday after:"last month" --- lib/database.cc | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/database.cc b/lib/database.cc index cb02220..615b408 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -19,6 +19,7 @@ */ #include "database-private.h" +#include "getdate.h" #include <iostream> @@ -643,16 +644,17 @@ transform_date (_notmuch_token_t *root, void *opaque) int before = (strcmp (root->text, "before") == 0); if (after || before) { _notmuch_token_t *tok = root->left; - struct tm t; + bool ok; + struct timespec result, now; time_t time_value; - char *end, *serialzed; + char *serialzed; /* Parse the date */ assert (tok && tok->type == TOK_LIT); - memset(&t, 0, sizeof(t)); - end = strptime (tok->text, "%Y/%m/%d", &t); - time_value = mktime(&t); - if (!end || *end || time_value == -1) { + clock_gettime (CLOCK_REALTIME, &now); + ok = get_date (&result, tok->text, &now); + time_value = result.tv_sec; + if (!ok || time_value == -1) { char *msg = talloc_asprintf (root, "Invalid date \"%s\"", tok->text); return _notmuch_token_create_term (root, TOK_ERROR, msg); -- 1.7.2.3