Commit ca5bdca
Changed files (1)
src
src/utils.py
@@ -266,6 +266,67 @@ def ts_to_dt(ts: str | float | None) -> datetime | None:
return None
+def parse_time(timestr: str) -> dict[str, int]:
+ """Parse time string.
+
+ Support formats:
+ length= 4: yyyy
+ length= 6: yyyymm
+ length= 7: yyyy-mm
+ length= 8: yyyymmdd
+ length=10: yyyy-mm-dd
+ length=14: yyyymmddHHMMSS
+ length=15: yyyymmdd-HHMMSS
+ length=17: yyyymmdd HH:MM:SS
+ length=19: yyyy-mm-dd HH:MM:SS
+
+ Returns:
+ {"year": int, "month": int, "day": int, "hour": int, "minute": int, "second": int}
+ """
+ res = {"year": 0, "month": 0, "day": 0, "hour": 0, "minute": 0, "second": 0}
+ if len(timestr) not in [4, 6, 7, 8, 10, 14, 15, 19]:
+ logger.warning(f"Invalid time format: {timestr}")
+ return res
+
+ # first 4 digits are year
+ res["year"] = int(timestr[:4])
+ if len(timestr) == 6: # yyyymm
+ res["month"] = int(timestr[4:6])
+ elif len(timestr) == 7: # yyyy-mm
+ res["month"] = int(timestr[5:7])
+ elif len(timestr) == 8: # yyyymmdd
+ res["month"] = int(timestr[4:6])
+ res["day"] = int(timestr[6:8])
+ elif len(timestr) == 10: # yyyy-mm-dd
+ res["month"] = int(timestr[5:7])
+ res["day"] = int(timestr[8:10])
+ elif len(timestr) == 14: # yyyymmddHHMMSS
+ res["month"] = int(timestr[4:6])
+ res["day"] = int(timestr[6:8])
+ res["hour"] = int(timestr[8:10])
+ res["minute"] = int(timestr[10:12])
+ res["second"] = int(timestr[12:14])
+ elif len(timestr) == 15: # yyyymmdd-HHMMSS
+ res["month"] = int(timestr[4:6])
+ res["day"] = int(timestr[6:8])
+ res["hour"] = int(timestr[9:11])
+ res["minute"] = int(timestr[11:13])
+ res["second"] = int(timestr[13:15])
+ elif len(timestr) == 17: # yyyymmdd HH:MM:SS
+ res["month"] = int(timestr[4:6])
+ res["day"] = int(timestr[6:8])
+ res["hour"] = int(timestr[9:11])
+ res["minute"] = int(timestr[12:14])
+ res["second"] = int(timestr[15:17])
+ elif len(timestr) == 19: # yyyy-mm-dd HH:MM:SS
+ res["month"] = int(timestr[5:7])
+ res["day"] = int(timestr[8:10])
+ res["hour"] = int(timestr[11:13])
+ res["minute"] = int(timestr[14:16])
+ res["second"] = int(timestr[17:19])
+ return res
+
+
async def myself(client: Client) -> User:
"""Get myself info."""
if cache.get("me"):