diff -r d674fb9499c4 include/urweb.h --- a/include/urweb.h Fri May 06 20:51:40 2011 -0430 +++ b/include/urweb.h Sun May 15 13:28:17 2011 +0100 @@ -329,6 +329,7 @@ uw_Basis_string uw_queryString(uw_context); uw_Basis_time *uw_Basis_readUtc(uw_context, uw_Basis_string); +uw_Basis_time *uw_Basis_readTime(uw_context, uw_Basis_string); void uw_isPost(uw_context); uw_Basis_bool uw_Basis_currentUrlHasPost(uw_context); diff -r d674fb9499c4 src/c/urweb.c --- a/src/c/urweb.c Fri May 06 20:51:40 2011 -0430 +++ b/src/c/urweb.c Sun May 15 13:28:49 2011 +0100 @@ -3772,6 +3772,23 @@ return NULL; } +uw_Basis_time *uw_Basis_readTime(uw_context ctx, uw_Basis_string s) { + struct tm stm = {}; + char *end = strchr(s, 0); + stm.tm_isdst = -1; + + if (strptime(s, TIME_FMT_PG, &stm) == end || strptime(s, TIME_FMT, &stm) == end) { + uw_Basis_time *r = uw_malloc(ctx, sizeof(uw_Basis_time)); + + r->seconds = mktime(&stm); + r->microseconds = 0; + + return r; + } + else + return NULL; +} + static const char begin_xhtml[] = "\n\n"; failure_kind uw_begin_onError(uw_context ctx, char *msg) { diff -r d674fb9499c4 lib/ur/basis.urs --- a/lib/ur/basis.urs Fri May 06 20:51:40 2011 -0430 +++ b/lib/ur/basis.urs Sun May 15 13:29:02 2011 +0100 @@ -147,6 +147,7 @@ val addSeconds : time -> int -> time val timef : string -> time -> string (* Uses strftime() format string *) val readUtc : string -> option time +val readTime : string -> option time (** * Encryption *)