e
This commit is contained in:
parent
ceea4f7f5b
commit
00000d91dc
6 changed files with 28 additions and 21 deletions
|
|
@ -47,54 +47,61 @@ class Time(datetime):
|
|||
dt = self.astimezone(self.ZONES[tzone])
|
||||
return self.__class__.fromtimestamp(dt.timestamp(), tz=self.ZONES[tzone])
|
||||
|
||||
@classmethod
|
||||
def _to_class_tz(cls, dt) -> "Time":
|
||||
dt = dt.astimezone(cls.TZ)
|
||||
return cls.fromtimestamp(dt.timestamp(), tz=cls.TZ)
|
||||
|
||||
@classmethod
|
||||
def from_str(
|
||||
cls,
|
||||
s: str,
|
||||
fmt: str | None = None,
|
||||
timezone: str | None = None,
|
||||
) -> "Time":
|
||||
|
||||
pattern = re.compile(rf"\b({"|".join(cls.ZONES.keys())})\b")
|
||||
|
||||
match = pattern.search(s)
|
||||
|
||||
tz = cls.ZONES.get(match[1]) if match else cls.TZ
|
||||
|
||||
cleaned_str = pattern.sub("", s).strip()
|
||||
tz = cls.ZONES.get(timezone, cls.TZ)
|
||||
|
||||
if fmt:
|
||||
dt = datetime.strptime(cleaned_str, fmt)
|
||||
dt = datetime.strptime(s, fmt)
|
||||
|
||||
dt = tz.localize(dt)
|
||||
|
||||
else:
|
||||
formats = [
|
||||
"%B %d, %Y %H:%M %p",
|
||||
"%B %d, %Y %I:%M %p",
|
||||
"%B %d, %Y %I:%M:%S %p",
|
||||
"%m/%d/%Y %I:%M %p",
|
||||
"%B %d, %Y %H:%M",
|
||||
"%B %d, %Y %H:%M:%S",
|
||||
"%B %d, %Y %H:%M:%S %p",
|
||||
"%Y-%m-%d",
|
||||
"%Y-%m-%d %H:%M",
|
||||
"%Y-%m-%d %H:%M:%S",
|
||||
"%Y/%m/%d %H:%M",
|
||||
"%Y/%m/%d %H:%M:%S",
|
||||
"%m/%d/%Y %H:%M",
|
||||
"%m/%d/%Y %H:%M:%S",
|
||||
"%m/%d/%Y %I:%M %p",
|
||||
"%Y/%m/%dT%H:%M:%S.%fZ",
|
||||
"%Y-%m-%dT%H:%M:%S.%fZ",
|
||||
"%a, %d %b %Y %H:%M:%S %z",
|
||||
]
|
||||
|
||||
for frmt in formats:
|
||||
try:
|
||||
dt = datetime.strptime(cleaned_str, frmt)
|
||||
dt = datetime.strptime(s, frmt)
|
||||
break
|
||||
except ValueError:
|
||||
continue
|
||||
else:
|
||||
return cls.from_ts(Time.default_8())
|
||||
|
||||
if not dt.tzinfo:
|
||||
dt = tz.localize(dt) if hasattr(tz, "localize") else dt.replace(tzinfo=tz)
|
||||
if not dt.tzinfo:
|
||||
dt = (
|
||||
tz.localize(dt)
|
||||
if hasattr(tz, "localize")
|
||||
else dt.replace(tzinfo=tz)
|
||||
)
|
||||
|
||||
return cls.fromtimestamp(dt.astimezone(cls.TZ).timestamp(), tz=cls.TZ)
|
||||
return cls._to_class_tz(dt)
|
||||
|
||||
|
||||
class Leagues:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue