man print_time_table (Fonctions bibliothèques) - parse_time ,


parse_time ,print_time_table ,unparse_time ,unparse_time_approx , - parse and unparse time intervals


The roken library (libroken, -lroken)


#include <parse_time.h>parse_time const char *timespec const char *def_unitprint_time_table FILE *funparse_time int seconds char *buf size_t lenunparse_time_approx int seconds char *buf size_t len


The parse_time function converts a the period of time specified in into a number of seconds. The timespec can be any number of pairs separated by comma and whitespace. The number can be negative. Number without explicit units are taken as being def_unit .

The unparse_time and unparse_time_approx does the opposite of parse_time , that is they take a number of seconds and express that as human readable string. unparse_time produces an exact time, while unparse_time_approx restricts the result to only include one units.

print_time_table prints a descriptive list of available units on the passed file descriptor.

The possible units include:

second , s
minute , m
hour , h
seven days
30 days
365 days

Units names can be arbitrarily abbreviated (as long as they are unique).



returns the number of seconds that represents the expression in timespec or -1 on error. unparse_time and unparse_time_approx return the number of characters written to buf . if the return value is greater than or equal to the len argument, the string was too short and some of the printed characters were discarded.


#include <stdio.h> #include <parse_time.h>

int main(int argc, char **argv) { int i; int result; char buf[128]; print_time_table(stdout); for (i = 1; i < argc; i++) { result = parse_time(argv[i], "second"); if(result == -1) { fprintf(stderr, "%s: parse error\n", argv[i]); continue; } printf("--\n"); printf("parse_time = %d\n", result); unparse_time(result, buf, sizeof(buf)); printf("unparse_time = %s\n", buf); unparse_time_approx(result, buf, sizeof(buf)); printf("unparse_time_approx = %s\n", buf); } return 0; } $ ./a.out "1 minute 30 seconds" "90 s" "1 y -1 s" 1 year = 365 days 1 month = 30 days 1 week = 7 days 1 day = 24 hours 1 hour = 60 minutes 1 minute = 60 seconds 1 second -- parse_time = 90 unparse_time = 1 minute 30 seconds unparse_time_approx = 1 minute -- parse_time = 90 unparse_time = 1 minute 30 seconds unparse_time_approx = 1 minute -- parse_time = 31535999 unparse_time = 12 months 4 days 23 hours 59 minutes 59 seconds unparse_time_approx = 12 months


Since parse_time returns -1 on error there is no way to parse "minus one second". Currently "s" at the end of units is ignored. This is a hack for English plural forms. If these functions are ever localised, this scheme will have to change.