File size: 1,142 Bytes
07b054e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from __future__ import annotations

"""Datetime utility helpers."""

from datetime import datetime, timedelta, timezone
from typing import Optional, Union


JST = timezone(timedelta(hours=9))


def normalize_to_jst_string(value: Optional[Union[str, datetime]]) -> str:
    """Convert various datetime representations into JST string (YYYY-MM-DD HH:MM:SS).



    If the value is None/empty or cannot be parsed, returns 'N/A'.

    """

    if value is None:
        return "N/A"

    if isinstance(value, datetime):
        dt = value
    else:
        s = str(value).strip()
        if not s or s.lower() in {"nan", "n/a", "none"}:
            return "N/A"
        try:
            dt = datetime.fromisoformat(s.replace("Z", "+00:00"))
        except ValueError:
            try:
                dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
            except ValueError:
                return "N/A"

    if dt.tzinfo is None:
        # Assume already JST when timezone-less
        dt = dt.replace(tzinfo=JST)
    else:
        dt = dt.astimezone(JST)

    return dt.strftime("%Y-%m-%d %H:%M:%S")