代码之家  ›  专栏  ›  技术社区  ›  Thanh Nhan

如何在Python中检查计算机的日期格式?

  •  0
  • Thanh Nhan  · 技术社区  · 1 年前

    请帮帮我。我如何在Python中检查计算机的日期格式,如果日期格式是dd/mm/yyyy,则打印数字1,如果是mm/dd/yyyyy,则打印号码2。谢谢你的帮助。

    我之前曾向Copilot寻求帮助,但没能正常工作。

    from dateutil import parser
    
    def validate_date_format(date_str):
        try:
            parser.parse(date_str)
            return 1
        except ValueError:
            return None
    
    input_date = input("Enter the date: ")
    result = validate_date_format(input_date)
    if result:
        print(f"Date format: {result}")
    else:
        print("Invalid date format.")
    
    2 回复  |  直到 1 年前
        1
  •  0
  •   bryce    1 年前

    Windows与macOS/Linux需要分别处理,

    import locale
    import platform
    import ctypes
    
    def get_windows_date_format() -> int:
        LOCALE_SSHORTDATE = 0x1F  # Constant to get the short date format
        buffer_size = 80
        buffer = ctypes.create_unicode_buffer(buffer_size)
    
        # Call Windows API to get the short date format
        ctypes.windll.kernel32.GetLocaleInfoW(
            ctypes.windll.kernel32.GetUserDefaultLCID(),
            LOCALE_SSHORTDATE,
            buffer,
            buffer_size
        )
        
        short_date_format = buffer.value
    
        # Determine the format based on the leading pattern
        if short_date_format.startswith('M'):
            return 2  # mm/dd/yyyy format
        elif short_date_format.startswith('d'):
            return 1  # dd/mm/yyyy format
        else:
            return 0  # Unknown or different format
    
    def get_unix_date_format() -> int:
        # On macOS and Linux, we rely on locale settings
        locale.setlocale(locale.LC_TIME, '')
        formatted_date = locale.nl_langinfo(locale.D_FMT)
        
        # Guess format based on known patterns
        if '%d' in formatted_date and '%m' in formatted_date:
            return 1  # dd/mm/yyyy format
        elif '%m' in formatted_date and '%d' in formatted_date:
            return 2  # mm/dd/yyyy format
        else:
            return 0  # Unknown or different format
    
    def check_date_format() -> int:
        if platform.system() == "Windows":
            return get_windows_date_format()
        else:
            return get_unix_date_format()
    
    result = check_date_format()
    
    if result == 1:
        print("Date format is dd/mm/yyyy (1)")
    elif result == 2:
        print("Date format is mm/dd/yyyy (2)")
    else:
        print("Unknown or different date format")
    
        2
  •  0
  •   vht981230    1 年前

    我认为仅凭字符串输入无法检查日期格式,因为在某些情况下,日期和月份都小于或等于12,使得月份和日期无法区分。但是,如果你只是想检查日期超过12的更明显的情况,并将字符串识别为格式 dd/mm/yyyy 默认情况下,在其他情况下,除了尝试将日期字符串解析为 DateTime 对象在 日/月/年 格式首先使用 datetime.strptime 里面 ValueError 试试抓。如果它引发异常,则继续尝试解析字符串 mm/dd/yyyy 格式

    from datetime import datetime
    
    def validate_date_format(date_str):
        try:
            datetime.strptime(date_str, '%d/%m/%Y')
            return 1
        except ValueError:
            datetime.strptime(date_str, '%m/%d/%Y')
            return 2
    
    input_date = input("Enter the date: ")
    result = validate_date_format(input_date)
    if result:
        print(f"Date format: {result}")
    else:
        print("Invalid date format.")