From 8456a2aa68dbcf311f5557347e2387edfd6ec8da Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 14 Jul 2022 21:52:36 +0200 Subject: [PATCH 1/2] time: Add time module to provide strftime. --- python-stdlib/time/manifest.py | 3 ++ python-stdlib/time/time.py | 79 ++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 python-stdlib/time/manifest.py create mode 100644 python-stdlib/time/time.py diff --git a/python-stdlib/time/manifest.py b/python-stdlib/time/manifest.py new file mode 100644 index 000000000..052ed4a17 --- /dev/null +++ b/python-stdlib/time/manifest.py @@ -0,0 +1,3 @@ +metadata(version="0.1") + +module("time.py") diff --git a/python-stdlib/time/time.py b/python-stdlib/time/time.py new file mode 100644 index 000000000..68f7d921d --- /dev/null +++ b/python-stdlib/time/time.py @@ -0,0 +1,79 @@ +from utime import * +from micropython import const + +_TS_YEAR = const(0) +_TS_MON = const(1) +_TS_MDAY = const(2) +_TS_HOUR = const(3) +_TS_MIN = const(4) +_TS_SEC = const(5) +_TS_WDAY = const(6) +_TS_YDAY = const(7) +_TS_ISDST = const(8) + +_WDAY = const(("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")) +_MDAY = const( + ( + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ) +) + + +def strftime(datefmt, ts): + from io import StringIO + + fmtsp = False + ftime = StringIO() + for k in datefmt: + if fmtsp: + if k == "a": + ftime.write(_WDAY[ts[_TS_WDAY]][0:3]) + elif k == "A": + ftime.write(_WDAY[ts[_TS_WDAY]]) + elif k == "b": + ftime.write(_MDAY[ts[_TS_MON] - 1][0:3]) + elif k == "B": + ftime.write(_MDAY[ts[_TS_MON] - 1]) + elif k == "d": + ftime.write("%02d" % ts[_TS_MDAY]) + elif k == "H": + ftime.write("%02d" % ts[_TS_HOUR]) + elif k == "I": + ftime.write("%02d" % (ts[_TS_HOUR] % 12)) + elif k == "j": + ftime.write("%03d" % ts[_TS_YDAY]) + elif k == "m": + ftime.write("%02d" % ts[_TS_MON]) + elif k == "M": + ftime.write("%02d" % ts[_TS_MIN]) + elif k == "P": + ftime.write("AM" if ts[_TS_HOUR] < 12 else "PM") + elif k == "S": + ftime.write("%02d" % ts[_TS_SEC]) + elif k == "w": + ftime.write(str(ts[_TS_WDAY])) + elif k == "y": + ftime.write("%02d" % (ts[_TS_YEAR] % 100)) + elif k == "Y": + ftime.write(str(ts[_TS_YEAR])) + else: + ftime.write(k) + fmtsp = False + elif k == "%": + fmtsp = True + else: + ftime.write(k) + val = ftime.getvalue() + ftime.close() + return val From 8d653e96db15344e59c9f057355c1eeffb957097 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 14 Dec 2022 11:57:16 +1100 Subject: [PATCH 2/2] time: Add unit test for time.strftime. Signed-off-by: Damien George --- python-stdlib/time/test_time.py | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 python-stdlib/time/test_time.py diff --git a/python-stdlib/time/test_time.py b/python-stdlib/time/test_time.py new file mode 100644 index 000000000..98dfcafdb --- /dev/null +++ b/python-stdlib/time/test_time.py @@ -0,0 +1,42 @@ +import time +import unittest + +DAYS = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") + +MONTHS = ( + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", +) + +TIME_TUPLE = (2022, 12, 14, 0, 45, 17, 2, 348, 0) + + +class TestStrftime(unittest.TestCase): + def test_not_formatting(self): + fmt = "a string with no formatting {}[]() 0123456789 !@#$^&*" + self.assertEqual(time.strftime(fmt, TIME_TUPLE), fmt) + + def test_days(self): + for i, day in enumerate(DAYS): + t = (0, 0, 0, 0, 0, 0, i, 0, 0) + self.assertEqual(time.strftime("%a%A", t), day[:3] + day) + + def test_months(self): + for i, month in enumerate(MONTHS): + t = (0, i + 1, 0, 0, 0, 0, 0, 0, 0) + self.assertEqual(time.strftime("%b%B", t), month[:3] + month) + + def test_full(self): + fmt = "%Y-%m-%d %a %b %I:%M:%S %%%P%%" + expected = "2022-12-14 Wed Dec 00:45:17 %AM%" + self.assertEqual(time.strftime(fmt, TIME_TUPLE), expected) 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