File size: 1,386 Bytes
3a900c7
 
 
afb0c77
3a900c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
afb0c77
3a900c7
 
 
 
 
 
 
 
 
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
44
45
46
47
48
# -*- coding: utf-8 -*-
"""src Module"""
from datetime import datetime
import logging
import re
from zoneinfo import ZoneInfo

from src.utils import get_package_version

__all__ = ["LocalTimeFormatter"]

PROGRAM_NAME = 'SaliencyMapDemo'
__version__ = get_package_version()


class LocalTimeFormatter(logging.Formatter):
    """

    ログの時刻表示を指定したタイムゾーンに変換するクラス。

    """
    time_zone: str = "GMT"
    pattern = re.compile(r"([\.|,]\%\d{1,}f)(\%z)?", re.IGNORECASE)
    """

    %Y-%m-%dT%H:%M:%S.%03f

    %Y-%m-%dT%H:%M:%S.%03f%z

    """
    def formatTime(self, record, datefmt=None):
        dt = datetime.fromtimestamp(
            record.created,
            ZoneInfo(self.time_zone)
        )

        if datefmt is None:
            s = dt.strftime(self.default_time_format)
            return s

        t = dt.strftime(re.sub(self.pattern, "", datefmt))
        match = re.search(self.pattern, datefmt)
        if match is None:
            return t

        groups = match.groups()
        msec_format = groups[0] if groups[0] else ""
        time_zone_format = groups[1] if groups[1] else ""
        time_zone_str = dt.strftime(time_zone_format)
        msec_format = msec_format.replace("f", "d")
        s = f"{t}{msec_format % record.msecs }{time_zone_str}"
        return s