Commit ca5bdca

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-06-05 08:34:45
chore: add `parse_time` function
1 parent 4b22219
Changed files (1)
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"):