1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-26 08:20:27 +00:00

Add os/date to core library.

This commit is contained in:
Calvin Rose 2019-01-20 14:34:33 -05:00
parent 0025f6ac87
commit 2bbf9fdcc5

View File

@ -272,6 +272,30 @@ static Janet os_cwd(int32_t argc, Janet *argv) {
return janet_cstringv(ptr); return janet_cstringv(ptr);
} }
static Janet os_date(int32_t argc, Janet *argv) {
janet_arity(argc, 0, 1);
(void) argv;
time_t t;
struct tm *t_info;
if (argc) {
t = (time_t) janet_getinteger64(argv, 0);
} else {
time(&t);
}
t_info = localtime(&t);
JanetKV *st = janet_struct_begin(9);
janet_struct_put(st, janet_ckeywordv("seconds"), janet_wrap_number(t_info->tm_sec));
janet_struct_put(st, janet_ckeywordv("minutes"), janet_wrap_number(t_info->tm_min));
janet_struct_put(st, janet_ckeywordv("hours"), janet_wrap_number(t_info->tm_hour));
janet_struct_put(st, janet_ckeywordv("month-day"), janet_wrap_number(t_info->tm_mday));
janet_struct_put(st, janet_ckeywordv("month"), janet_wrap_number(t_info->tm_mon));
janet_struct_put(st, janet_ckeywordv("year"), janet_wrap_number(t_info->tm_year));
janet_struct_put(st, janet_ckeywordv("week-day"), janet_wrap_number(t_info->tm_wday));
janet_struct_put(st, janet_ckeywordv("year-day"), janet_wrap_number(t_info->tm_yday));
janet_struct_put(st, janet_ckeywordv("dst"), janet_wrap_boolean(t_info->tm_isdst));
return janet_wrap_struct(janet_struct_end(st));
}
static const JanetReg cfuns[] = { static const JanetReg cfuns[] = {
{ {
"os/which", os_which, "os/which", os_which,
@ -318,7 +342,7 @@ static const JanetReg cfuns[] = {
"os/clock", os_clock, "os/clock", os_clock,
JDOC("(os/clock)\n\n" JDOC("(os/clock)\n\n"
"Return the number of seconds since some fixed point in time. The clock " "Return the number of seconds since some fixed point in time. The clock "
"is guaranteed to be non decreased in real time.") "is guaranteed to be non decreasing in real time.")
}, },
{ {
"os/sleep", os_sleep, "os/sleep", os_sleep,
@ -331,6 +355,21 @@ static const JanetReg cfuns[] = {
JDOC("(os/cwd)\n\n" JDOC("(os/cwd)\n\n"
"Returns the current working directory.") "Returns the current working directory.")
}, },
{
"os/date", os_date,
JDOC("(os/date [,time])\n\n"
"Returns the given time as a date struct, or the current time if no time is given. "
"Returns a struct with following key values.\n\n"
"\t:seconds - number of seconds [0-61]\n"
"\t:minutes - number of minutes [0-59]\n"
"\t:seconds - number of hours [0-23]\n"
"\t:month-day - day of month [1-31]\n"
"\t:month - month of year [0, 11]\n"
"\t:year - years since 1900\n"
"\t:week-day - day of the week [0-6]\n"
"\t:year-day - day of the year [0-365]\n"
"\t:dst - If Day Light Savings is in effect")
},
{NULL, NULL, NULL} {NULL, NULL, NULL}
}; };