File size: 4,540 Bytes
e5429bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from datetime import datetime, timedelta
import re
from datetime import datetime
import pytz
vietnam_tz = pytz.timezone("Asia/Ho_Chi_Minh")
from datetime import datetime, timedelta


def chuan_hoa_time(time_str):
    days_map = {
        "thứ bảy": "Saturday",
        "chủ nhật": "Sunday",
        "thứ hai": "Monday",
        "thứ ba": "Tuesday",
        "thứ tư": "Wednesday",
        "thứ năm": "Thursday",
        "thứ sáu": "Friday",
    }

    month_map = {
        "tháng 1": "January", "tháng 2": "February", "tháng 3": "March",
        "tháng 4": "April", "tháng 5": "May", "tháng 6": "June",
        "tháng 7": "July", "tháng 8": "August", "tháng 9": "September",
        "tháng 10": "October", "tháng 11": "November", "tháng 12": "December"
    }

    if isinstance(time_str, datetime):
        time_str = time_str.strftime('%Y-%m-%d %H:%M:%S')
    elif not isinstance(time_str, str):
        return ""
    time_str = time_str.lower().strip()
    now = datetime.now()
    if re.match(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$", time_str):
        try:
            # Remove 'Z' and parse the datetime in UTC
            time_str = time_str.replace('z', '+00:00')
            dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z")
            return dt
        except ValueError:
            raise ValueError(f"Không thể chuẩn hóa chuỗi thời gian: {time_str}")

    # Các trường hợp khác (như "phút trước", "giờ trước", ...)
    if "phút trước" in time_str:
        minutes = int(re.search(r"(\d+)", time_str).group(1))
        time_result = now - timedelta(minutes=minutes)
        return time_result.strftime("%d/%m/%Y %H:%M")
    elif "giờ trước" in time_str:
        hours = int(re.search(r"(\d+)", time_str).group(1))
        time_result = now - timedelta(hours=hours)
        return time_result.strftime("%d/%m/%Y %H:%M")
    elif "hôm qua" in time_str:
        time_result = now - timedelta(days=1)
        return time_result.strftime("%d/%m/%Y %H:%M")
    elif "ngày trước" in time_str:
        days = int(re.search(r"(\d+)", time_str).group(1))
        time_result = now - timedelta(days=days)
        return time_result.strftime("%d/%m/%Y %H:%M")
    time_str = re.sub(r"\s?\(gmt[+\-]\d{1,2}\)", "", time_str).strip()  # Loại bỏ múi giờ
    time_str = time_str.replace("|", "")  # Loại bỏ ký tự phân cách '|'
    time_str = re.sub(r"\s+", " ", time_str).strip()  # Loại bỏ khoảng trắng thừa

    if re.match(r"^\d{8} \d{2}:\d{2}$", time_str):
        time_str = f"{time_str[:4]}/{time_str[4:6]}/{time_str[6:8]} {time_str[9:]}"

    if re.match(r"^[a-z]+ \d{2}/\d{2}/\d{4} \d{2}:\d{2}$", time_str):
        time_str = time_str.replace(" ", ", ", 1)  # Thêm dấu phẩy sau ngày
    for vietnamese_month, english_month in month_map.items():
        time_str = time_str.replace(vietnamese_month, english_month)
    for vietnamese_day, english_day in days_map.items():
        time_str = time_str.replace(vietnamese_day, english_day)
    formats = [
        "%A, %d/%m/%Y %H:%M",          # Monday, 2/12/2024 11:33
        "%Y-%m-%d %H:%M:%S",           # 2024-11-29 16:01:23
        "%Y-%m-%dT%H:%M:%S",           # 2024-11-30T10:20:00
        "%A, %d/%m/%Y - %H:%M",        # Monday, 2/12/2024 - 11:33
        "%A, %d/%m/%Y, %H:%M",         # Monday, 2/12/2024, 11:33
        "%Y-%m-%d %H:%M",              # 2024-12-01 08:00
        "%H:%M, %d/%m/%Y",             # 10:45, 01/12/2024
        "%d %B %Y %H:%M",              # 2 December 2024 11:33
        "%d/%m/%Y %H:%M",              # 02/12/2024 15:22
        "%d %b %Y %H:%M",              # 2 Dec 2024 11:33
        "%d/%m/%Y %H:%M:%S",           # 02/12/2024 15:22:00
        "%A, %d/%m/%Y %H:%M %z",       # Monday, 02/12/2024 10:08 +0700
        "%b %d, %Y %H:%M",             # Dec 2, 2024 15:22
        "%d tháng %m, %Y | %H:%M",     # 2 tháng 12, 2024 | 15:10
        "%A, %d/%m/%Y - %H:%M",        # thứ hai, 02/12/2024 - 15:40
        "%Y,%m,%d %H:%M",              # 2024,12,02 15:44
        "%A, %d/%m/%Y , %H:%M"         # Monday, 02/12/2024 , 16:01
    ]
    for fmt in formats:
        try:
            dt = datetime.strptime(time_str, fmt)
            dt_vietnam = vietnam_tz.localize(dt)
            return dt_vietnam
        except ValueError:
            continue
    raise ValueError(f"Không thể chuẩn hóa chuỗi thời gian: {time_str}")