Man page - parse_time(3)

Packages contains this manual

Manual


PARSE_TIME (3) Library Functions Manual PARSE_TIME (3)

NAME

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

LIBRARY

The roken library (libroken, -lroken)

SYNOPSIS

#include <parse_time.h>

int

parse_time ( constĀ charĀ *timespec , constĀ charĀ *def_unit );

void

print_time_table ( FILEĀ *f );

size_t

unparse_time ( intĀ seconds , charĀ *buf , size_tĀ len );

size_t

unparse_time_approx ( intĀ seconds , charĀ *buf , size_tĀ len );

DESCRIPTION

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

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

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
day
week

seven days

month

30 days

year

365 days

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

RETURN VALUES

parse_time () 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.

EXAMPLES

#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

BUGS

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. HEIMDAL November 17, 2013 PARSE_TIME (3)