Skip to content

Commit 2305d84

Browse files
nickzoicdpgeorge
authored andcommitted
esp32/modutime.c: Add localtime and mktime functions.
1 parent 090b6b8 commit 2305d84

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

ports/esp32/modutime.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,51 @@
3030
#include <string.h>
3131
#include <sys/time.h>
3232

33+
#include "py/runtime.h"
34+
#include "lib/timeutils/timeutils.h"
3335
#include "extmod/utime_mphal.h"
3436

37+
STATIC mp_obj_t time_localtime(size_t n_args, const mp_obj_t *args) {
38+
timeutils_struct_time_t tm;
39+
mp_int_t seconds;
40+
if (n_args == 0 || args[0] == mp_const_none) {
41+
struct timeval tv;
42+
gettimeofday(&tv, NULL);
43+
seconds = tv.tv_sec;
44+
} else {
45+
seconds = mp_obj_get_int(args[0]);
46+
}
47+
timeutils_seconds_since_2000_to_struct_time(seconds, &tm);
48+
mp_obj_t tuple[8] = {
49+
tuple[0] = mp_obj_new_int(tm.tm_year),
50+
tuple[1] = mp_obj_new_int(tm.tm_mon),
51+
tuple[2] = mp_obj_new_int(tm.tm_mday),
52+
tuple[3] = mp_obj_new_int(tm.tm_hour),
53+
tuple[4] = mp_obj_new_int(tm.tm_min),
54+
tuple[5] = mp_obj_new_int(tm.tm_sec),
55+
tuple[6] = mp_obj_new_int(tm.tm_wday),
56+
tuple[7] = mp_obj_new_int(tm.tm_yday),
57+
};
58+
return mp_obj_new_tuple(8, tuple);
59+
}
60+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(time_localtime_obj, 0, 1, time_localtime);
61+
62+
STATIC mp_obj_t time_mktime(mp_obj_t tuple) {
63+
size_t len;
64+
mp_obj_t *elem;
65+
mp_obj_get_array(tuple, &len, &elem);
66+
67+
// localtime generates a tuple of len 8. CPython uses 9, so we accept both.
68+
if (len < 8 || len > 9) {
69+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "mktime needs a tuple of length 8 or 9 (%d given)", len));
70+
}
71+
72+
return mp_obj_new_int_from_uint(timeutils_mktime(mp_obj_get_int(elem[0]),
73+
mp_obj_get_int(elem[1]), mp_obj_get_int(elem[2]), mp_obj_get_int(elem[3]),
74+
mp_obj_get_int(elem[4]), mp_obj_get_int(elem[5])));
75+
}
76+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(time_mktime_obj, time_mktime);
77+
3578
STATIC mp_obj_t time_time(void) {
3679
struct timeval tv;
3780
gettimeofday(&tv, NULL);
@@ -42,6 +85,8 @@ MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time);
4285
STATIC const mp_rom_map_elem_t time_module_globals_table[] = {
4386
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_utime) },
4487

88+
{ MP_ROM_QSTR(MP_QSTR_localtime), MP_ROM_PTR(&time_localtime_obj) },
89+
{ MP_ROM_QSTR(MP_QSTR_mktime), MP_ROM_PTR(&time_mktime_obj) },
4590
{ MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&time_time_obj) },
4691
{ MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_utime_sleep_obj) },
4792
{ MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_utime_sleep_ms_obj) },

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy