Skip to content

Commit 8fb255d

Browse files
committed
unix/modtime: Add strftime() function (only single argument is supported).
Following "don't rely on FFI for basic functionality" approach.
1 parent 2d11b17 commit 8fb255d

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

unix/modtime.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,16 @@ STATIC mp_obj_t mod_time_sleep_us(mp_obj_t arg) {
154154
}
155155
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_time_sleep_us_obj, mod_time_sleep_us);
156156

157+
STATIC mp_obj_t mod_time_strftime(mp_uint_t n_args, const mp_obj_t *args) {
158+
assert(n_args == 1);
159+
time_t t = time(NULL);
160+
struct tm *tm = localtime(&t);
161+
char buf[32];
162+
size_t sz = strftime(buf, sizeof(buf), mp_obj_str_get_str(args[0]), tm);
163+
return mp_obj_new_str(buf, sz, false);
164+
}
165+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_time_strftime_obj, 1, 2, mod_time_strftime);
166+
157167
STATIC const mp_rom_map_elem_t mp_module_time_globals_table[] = {
158168
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_utime) },
159169
{ MP_ROM_QSTR(MP_QSTR_clock), MP_ROM_PTR(&mod_time_clock_obj) },
@@ -164,6 +174,7 @@ STATIC const mp_rom_map_elem_t mp_module_time_globals_table[] = {
164174
{ MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mod_time_ticks_ms_obj) },
165175
{ MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mod_time_ticks_us_obj) },
166176
{ MP_ROM_QSTR(MP_QSTR_ticks_diff), MP_ROM_PTR(&mod_time_ticks_diff_obj) },
177+
{ MP_ROM_QSTR(MP_QSTR_strftime), MP_ROM_PTR(&mod_time_strftime_obj) },
167178
};
168179

169180
STATIC MP_DEFINE_CONST_DICT(mp_module_time_globals, mp_module_time_globals_table);

unix/qstrdefsport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ Q(sleep_us)
7777
Q(ticks_ms)
7878
Q(ticks_us)
7979
Q(ticks_diff)
80+
Q(strftime)
8081

8182
Q(socket)
8283
Q(sockaddr)

0 commit comments

Comments
 (0)