| from __future__ import annotations | |
| from datetime import datetime, timedelta, timezone | |
| try: | |
| from zoneinfo import ZoneInfo | |
| except ImportError: # pragma: no cover | |
| ZoneInfo = None # type: ignore[assignment] | |
| CHINA_TZ = ZoneInfo("Asia/Shanghai") if ZoneInfo else timezone(timedelta(hours=8)) | |
| def china_now() -> datetime: | |
| return datetime.now(CHINA_TZ) | |
| def china_now_string() -> str: | |
| return china_now().strftime("%Y-%m-%d %H:%M:%S") | |
| def china_from_timestamp_string(value: float) -> str: | |
| return datetime.fromtimestamp(value, CHINA_TZ).strftime("%Y-%m-%d %H:%M:%S") | |
| def china_date_from_timestamp_string(value: float) -> str: | |
| return datetime.fromtimestamp(value, CHINA_TZ).strftime("%Y-%m-%d") | |