IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> python3 日期解析问题 -> 正文阅读

[游戏开发]python3 日期解析问题

# -*- coding:utf-8 -*-

"""FaceBook 发布时间解析规则"""
import re
import time
import dateparser
from loguru import logger
import traceback


print('hello world')

hour = r'\d{1,2}'
minute = r'\d{1,2}'
period = r'AM|PM|'
month = (
    r"Jan(?:uary)?|"
    r"Feb(?:ruary)?|"
    r"Mar(?:ch)?|"
    r"Apr(?:il)?|"
    r"May|"
    r"Jun(?:e)?|"
    r"Jul(?:y)?|"
    r"Aug(?:ust)?|"
    r"Sep(?:tember)?|"
    r"Oct(?:ober)?|"
    r"Nov(?:ember)?|"
    r"Dec(?:ember)?"
)
day_of_month = r"\d{1,2}"
specific_date_md = f'(?:{month}) {day_of_month}' + r'(?:,? \d{4})?'
specific_date_dm = f'{day_of_month} (?:{month})' + r'(?:,? \d{4})?'
date = f'{specific_date_md}|{specific_date_dm}|Today|Yesterday'
exact_time = f"(?:{date}) at {hour}:{minute} ?(?:{period})"

relative_time_hours = '^\d{1,2}\s?h(?:rs?)?$'
relative_time_minutes = '^\d{1,2}\s?m(?:ins?)?$'
relative_time_days = '^\d{1,2}\s?d(?:ays?)?$'
relative_time_weeks = '^\d{1,2}\s?wk)$'
relative_time_months = '^\d{1,2}\s?(?:mth|mo)$'
relative_time_years = '^\d{1,2}\s?yr$'
relative_time = f'{relative_time_years}|{relative_time_months}|{relative_time_days}|{relative_time_hours}|{relative_time_minutes}|{relative_time_weeks}'


hours_test_case_list = ['19 h', '19h', '19 hr', '19 hrs']
minutes_test_case_list = ['10m', '10 m', '10 mins', '1 min']
days_test_case_list = ['1 d', '2d']

def test_hours():
    """测试hours解析规则"""
    for test_case in hours_test_case_list:
        hours_com = re.compile(relative_time_hours, re.IGNORECASE)
        print('hour_com:', hours_com)
        test_case_res = re.match(relative_time_hours, test_case)
        print('test_case_res:', test_case_res)
        if test_case_res:
            print(f'test_case:{test_case}--hours_result:{test_case_res.group(1)}')

def test_minutes():
    """测试minutes解析规则"""
    for test_case in minutes_test_case_list:
        minute_com = re.compile(relative_time_minutes, re.IGNORECASE)
        print('minute_com:', minute_com)
        test_case_res = re.match(relative_time_minutes, test_case)
        print('test_case_res:', test_case_res)
        if test_case_res:
            print(f'test_case:{test_case}--minutes_result:{test_case_res.group(1)}')

def test_days():
    """测试minutes解析规则"""
    for test_case in days_test_case_list:
        day_com = re.compile(relative_time_days, re.IGNORECASE)
        print('day_com:', day_com)
        test_case_res = re.match(relative_time_days, test_case)
        print('test_case_res:', test_case_res)
        if test_case_res:
            print(f'test_case:{test_case}--days_result:{test_case_res.group(1)}')



def get_publish_date():
    # publish_date
    result = dict()
    publish_time = int(time.time() * 1000)  # 发布时间 (如果未解析出发布时间默认会设定为当前时间)
    test_case_list = ['19h  ', '19 h', '10m', '10 m', '10 mins', '1 d', '2d', '10 hr', '11 hrs', 'December 4 at 11:46 pm',
        'December 4 at 11:46 am', 'February 16, 2013', 'Yesterday at 04:33', '21 December at 02:23', '1 September', '21 October 2020', 'January 6', 'December 27, 2021 at 1:02 AM']
    for test_case in test_case_list:
        publish_time_str = test_case.strip()

        if publish_time_str:
            publish_time_str = publish_time_str.strip()
            logger.info(f'[INFO]publish_time:{publish_time_str}')
            hour = r'\d{1,2}'
            minute = r'\d{1,2}'
            period = r'AM|PM|'
            month = (
                r"Jan(?:uary)?|"
                r"Feb(?:ruary)?|"
                r"Mar(?:ch)?|"
                r"Apr(?:il)?|"
                r"May|"
                r"Jun(?:e)?|"
                r"Jul(?:y)?|"
                r"Aug(?:ust)?|"
                r"Sep(?:tember)?|"
                r"Oct(?:ober)?|"
                r"Nov(?:ember)?|"
                r"Dec(?:ember)?"
            )
            day_of_month = r"\d{1,2}"
            specific_date_md = f'(?:{month}) {day_of_month}' + r'(?:,? \d{4})?'
            specific_date_dm = f'{day_of_month} (?:{month})' + r'(?:,? \d{4})?'
            date = f'{specific_date_md}|{specific_date_dm}|Today|Yesterday'
            exact_time = f"(?:{date}) at {hour}:{minute} ?(?:{period})"
            exact_date = f'{date}'
            relative_time_hours = r'^\d{1,2}\s?h(?:rs?)?$'
            relative_time_minutes = r'^\d{1,2}\s?m(?:ins?)?$'
            relative_time_days = r'^\d{1,2}\s?d(?:ays?)?$'
            relative_time_weeks = r'^\d{1,2}\s?wk$'
            relative_time_months = r'^\d{1,2}\s?(?:mth|mo)$'
            relative_time_years = r'^\d{1,2}\s?yr$'
            print('relative_time_hours_com:', re.compile(relative_time_hours))
            print('relative_time_minutes_com:', re.compile(relative_time_minutes))
            print('relative_time_days_com:', re.compile(relative_time_days))
            print('relative_time_weeks_com:', re.compile(relative_time_weeks))
            print('relative_time_years_com:', re.compile(relative_time_years))
            print('relative_time_months:', re.compile(relative_time_months))
        
            relative_time = f'{relative_time_years}|{relative_time_months}|{relative_time_days}|{relative_time_hours}|{relative_time_minutes}|{relative_time_weeks}'
            datetime_regex = re.compile(fr"({exact_time}|{relative_time}|{exact_date})", re.IGNORECASE)
            time_match = datetime_regex.search(publish_time_str)
            try:
                if time_match:
                    date_str = time_match.group(0).replace("mth", "month")
                else:
                    date_str = publish_time_str
                    logger.info('[INFO]未能匹配发布日期')
                    logger.warning(f'[WARNING]未能匹配发布日期:{date_str}')
                date_time = dateparser.parse(date_str)
                publish_time = int(date_time.timestamp() * 1000)
            except Exception as e:
                logger.error(f'[ERROR]解析发布时间异常{traceback.format_exc()}')
        result['publish_time'] = publish_time
        logger.info(f'[INFO]publish_time: {publish_time}')
    return result

if __name__ == '__main__':
    # test_hours()
    # test_minutes()
    # test_days()
    # parse_date()
    get_publish_date()

使用dateparser模块去解析日期字符串,结果可以输出为日期字符串或者时间戳;

参考项目:

? ? ? ? facebook_scraper

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:53:59  更:2022-03-12 17:54:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/30 22:18:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码