#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <time.h>
#include <errno.h>

int
main(int argc, char *argv[])
{
    time_t t;
    struct tm *tm;
    char *ptr;

    if (argc > 1) {
        errno = 0;
        t = (time_t) strtol(argv[1], &ptr, 0);
        if (errno || *ptr != '\0')
            errx(EXIT_FAILURE, "strtol: invalid number");
    } else
        t = time(NULL);

    if ((tm = localtime(&t)) == NULL)
        err(EXIT_FAILURE, "gmtime");

    printf("<tm_hour>:<tm_min>:<tm_sec> <tm_year>/<tm_mon>/<tm_mday>\n");
    printf("<%7d>:<%6d>:<%6d> <%7d>/<%6d>/<%7d>\n\n",
            tm->tm_hour,
            tm->tm_min,
            tm->tm_sec,
            tm->tm_year,
            tm->tm_mon,
            tm->tm_mday);

    printf("<tm_wday> <tm_yday> <tm_isdst>\n");
    printf("<%7d> <%7d> <%8d>\n\n",
            tm->tm_wday,
            tm->tm_yday,
            tm->tm_isdst);

    printf("<tm_gmtoff> <tm_zone>\n");
    printf("<%9ld> <%7s>\n",
            tm->tm_gmtoff,
            tm->tm_zone);

    exit(EXIT_SUCCESS);
}
