diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | lib.c | 34 | ||||
-rw-r--r-- | lib.h | 2 | ||||
-rw-r--r-- | txr.1 | 25 |
5 files changed, 75 insertions, 0 deletions
@@ -1,3 +1,15 @@ +2014-01-20 Kaz Kylheku <kaz@kylheku.com> + + * lib.c (broken_down_time_list): New static function. + (time_fields_local, time_fields_utc): New functions. + + * lib.h (time_fields_local, time_fields_utc): Declared. + + * eval.c (eval_init): Intern time_fields_local and time_fields_utc + as intrinsic functions. + + * txr.1: Documented. + 2014-01-16 Kaz Kylheku <kaz@kylheku.com> * hash.c (group_by): New function. @@ -2665,6 +2665,8 @@ void eval_init(void) reg_fun(intern(lit("time-usec"), user_package), func_n0(time_sec_usec)); reg_fun(intern(lit("time-string-local"), user_package), func_n2(time_string_local)); reg_fun(intern(lit("time-string-utc"), user_package), func_n2(time_string_utc)); + reg_fun(intern(lit("time-fields-local"), user_package), func_n1(time_fields_local)); + reg_fun(intern(lit("time-fields-utc"), user_package), func_n1(time_fields_utc)); reg_fun(intern(lit("make-time"), user_package), func_n7(make_time)); reg_fun(intern(lit("make-time-utc"), user_package), func_n7(make_time_utc)); @@ -5163,6 +5163,40 @@ val time_string_utc(val time, val format) return timestr; } +static val broken_time_list(struct tm *tms) +{ + return list(num(tms->tm_year + 1900), + num_fast(tms->tm_mon + 1), + num_fast(tms->tm_mday), + num_fast(tms->tm_hour), + num_fast(tms->tm_min), + num_fast(tms->tm_sec), + tms->tm_isdst ? t : nil, + nao); +} + +val time_fields_local(val time) +{ + struct tm tms; + time_t secs = c_num(time); + + if (localtime_r(&secs, &tms) == 0) + return nil; + + return broken_time_list(&tms); +} + +val time_fields_utc(val time) +{ + struct tm tms; + time_t secs = c_num(time); + + if (gmtime_r(&secs, &tms) == 0) + return nil; + + return broken_time_list(&tms); +} + static val make_time_impl(time_t (*pmktime)(struct tm *), val year, val month, val day, val hour, val minute, val second, @@ -687,6 +687,8 @@ val time_sec(void); val time_sec_usec(void); val time_string_local(val time, val format); val time_string_utc(val time, val format); +val time_fields_local(val time); +val time_fields_utc(val time); val make_time(val year, val month, val day, val hour, val minute, val second, val isdst); @@ -11212,6 +11212,31 @@ the format string of the C library function strftime. The <time> argument is an integer representing seconds obtained from the time function or from the time-usec function. +.SS Functions time-fields-local and time-fields-utc + +.TP +Syntax: + + (time-fields-local <time>) + (time-fields-utc <time>) + +.TP +Description: + +These functions take the numeric time returned by the time function, +and convert it to a list of seven fields. + +The time-string-local function converts the time to the local timezone of +the host system. The time-string-utc function produces time in UTC. + +The fields returned as a list are six integers, and a boolean value. +The six integers represent the year, month, day, hour, minute and second. +The boolean value indicates whether daylight savings time is in effect +(always nil in the case of time-fields-utc). + +The <time> argument is an integer representing seconds obtained from the +time function or from the time-usec function. + .SS Functions make-time and make-time-utc .TP |