time: Added the functions mktime localtime and gmtime

pull/97/merge
Renaud Guillon 2016-08-27 20:48:57 +02:00 zatwierdzone przez Paul Sokolovsky
rodzic 2903d599c7
commit bd7c796043
2 zmienionych plików z 47 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,10 @@
import time
ts = 0
for i in range(0, 31):
ts += 1 << i
ltt = time.localtime(ts)
gtt = time.gmtime(ts)
print("ts: ", ts, " local: ", tuple(ltt), " utc: ", tuple(gtt))
lts = time.mktime(ltt)
assert ts == lts

Wyświetl plik

@ -1,4 +1,6 @@
from utime import *
import ustruct
import uctypes
import ffi
import ffilib
import array
@ -12,6 +14,16 @@ libc = ffilib.libc()
gmtime_ = libc.func("P", "gmtime", "P")
localtime_ = libc.func("P", "localtime", "P")
strftime_ = libc.func("i", "strftime", "sisP")
mktime_ = libc.func("i", "mktime", "P")
def _tuple_to_c_tm(t):
return ustruct.pack("@iiiiiiiii", t[5], t[4], t[3], t[2], t[1] - 1, t[0] - 1900, (t[6] + 1) % 7, t[7] - 1, t[8])
def _c_tm_to_tuple(tm):
t = ustruct.unpack("@iiiiiiiii", tm)
return tuple([t[5] + 1900, t[4] + 1, t[3], t[2], t[1], t[0], (t[6] - 1) % 7, t[7] + 1, t[8]])
def strftime(format, t=None):
@ -25,6 +37,31 @@ def strftime(format, t=None):
l = strftime_(buf, 32, format, tm_p)
return str(buf[:l], "utf-8")
def localtime(t=None):
if t is None:
t = time()
t = int(t)
a = ustruct.pack('i', t)
tm_p = localtime_(a)
return _c_tm_to_tuple(uctypes.bytearray_at(tm_p, 36))
def gmtime(t=None):
if t is None:
t = time()
t = int(t)
a = ustruct.pack('i', t)
tm_p = gmtime_(a)
return _c_tm_to_tuple(uctypes.bytearray_at(tm_p, 36))
def mktime(tt):
return mktime_(_tuple_to_c_tm(tt))
def perf_counter():
return time()