extmod/modtime: Move tuple creation to common localtime implementation.

This factors code out of the ports and into the common `time.localtime`
implementation in `extmod/modtime.c`.  That helps to reduce code
duplication, prevent errors in implementation, and reduce code size on
some ports (mimxrt and stm32 at least).

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2025-08-12 11:47:52 +10:00
parent 40cc4e4f74
commit b3cd1a355e
10 changed files with 63 additions and 145 deletions

View File

@@ -29,23 +29,10 @@
#include "shared/timeutils/timeutils.h"
#include "pybrtc.h"
// Return the localtime as an 8-tuple.
static mp_obj_t mp_time_localtime_get(void) {
timeutils_struct_time_t tm;
// Get the localtime.
static void mp_time_localtime_get(timeutils_struct_time_t *tm) {
// get the seconds from the RTC
timeutils_seconds_since_2000_to_struct_time(pyb_rtc_get_seconds(), &tm);
mp_obj_t tuple[8] = {
mp_obj_new_int(tm.tm_year),
mp_obj_new_int(tm.tm_mon),
mp_obj_new_int(tm.tm_mday),
mp_obj_new_int(tm.tm_hour),
mp_obj_new_int(tm.tm_min),
mp_obj_new_int(tm.tm_sec),
mp_obj_new_int(tm.tm_wday),
mp_obj_new_int(tm.tm_yday)
};
return mp_obj_new_tuple(8, tuple);
timeutils_seconds_since_2000_to_struct_time(pyb_rtc_get_seconds(), tm);
}
// Returns the number of seconds, as an integer, since the Epoch.