• Python中关于时间的使用场景


    一. 显示精确到毫秒的字符串时间

    1.1 获取当前时间,精确到毫秒

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/22 12:32
    # @Author  : chinablue
    
    import datetime
    
    TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
    cur_time = datetime.datetime.now().strftime(TIME_FORMAT)
    
    print(cur_time)

    1.2 pytest输出毫秒级的日志

    1) 编写pytest配置文件pytest.ini

    [pytest]
    log_cli = true
    log_cli_level = INFO
    log_format = %(asctime)s.%(msecs)03d [%(levelname)-s] : %(message)s
    log_date_format = %Y-%m-%d %H:%M:%S

    2)编写用例文件test1.py

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/22 14:14
    # @Author  : chinablue
    # @File    : test1.py
    
    import pytest
    import logging
    
    logger = logging.getLogger(__name__)
    
    
    class Test1():
    
        def test_1(self):
            logger.debug("This is debug log.")
            logger.info("This is info log.")
            logger.warning("This is warning log.")
            logger.error("This is error log.")
            assert True
    
    
    if __name__ == '__main__':
        pytest.main(["test1.py"])

    3)运行用例文件test1.py

    ============================= test session starts =============================
    platform win32 -- Python 3.6.8rc1, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
    rootdir: D:workspace_pythonweb_login, configfile: pytest.ini
    plugins: allure-pytest-2.8.18, repeat-0.8.0
    collected 1 item
    
    test1.py::Test1::test_1 
    -------------------------------- live log call --------------------------------
    2020-11-22 14:15:59.432 [INFO] : This is info log.
    2020-11-22 14:15:59.433 [WARNING] : This is warning log.
    2020-11-22 14:15:59.433 [ERROR] : This is error log.
    PASSED                                                                   [100%]
    
    ============================== 1 passed in 0.01s ==============================

    从运行结果可以看出,此时输出的log信息中已显示出毫秒信息(即在pytest.ini中的log_format字段中指定msecs变量)

    二. 字符串时间和时间戳的相互转化

    2.1 获取当前的时间戳

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/13 17:13
    # @Author  : chinablue
    
    import time
    
    # 获取[秒级]时间戳
    print(f"获取当前时间戳(秒级):{int(time.time())}")
    # 获取[毫秒级]时间戳
    print(f"获取当前时间戳(毫秒级):{int(time.time() * 1000)}")
    # 获取[微秒级]时间戳
    print(f"获取当前时间戳(微秒级):{int(time.time() * 1000 * 1000)}")

    2.2 将秒级时间戳转换为字符串时间

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/13 17:13
    # @Author  : chinablue
    
    import time
    
    timestamp = 1606028234
    TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
    
    local_time = time.localtime(timestamp)
    time_string = time.strftime(TIME_FORMAT, local_time)
    
    print(time_string)

    2.3 将字符串时间转换为时间戳

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/13 17:13
    # @Author  : chinablue
    
    import time
    
    time_string = "2020-11-22 14:57:14"
    TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
    
    t = time.strptime(time_string, TIME_FORMAT)
    timestamp = int(time.mktime(t))
    
    print(timestamp)

    三. 将UTC时间转换为北京时间

    在python中使用jenkinsapi库来获取某一个jenkis job的构建时间时,返回的是一个UTC时间(形如:2020-11-12 03:44:55+00:00)

    此时,我们期望将这个UTC时间转换为北京时间

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/13 17:13
    # @Author  : chinablue
    
    import datetime
    from pytz import timezone
    
    utc_str_time = "2020-11-12 03:44:55+00:00"
    
    n_time = datetime.datetime.strptime(utc_str_time, '%Y-%m-%d %H:%M:%S+00:00')
    utctime = datetime.datetime(n_time.year, n_time.month, n_time.day, n_time.hour, n_time.minute, n_time.second, tzinfo=timezone('UTC'))
    beijing_time_raw = utctime.astimezone(timezone('Asia/Shanghai'))
    beijing_time = beijing_time_raw.strftime("%Y-%m-%d %H:%M:%S")
    
    print(beijing_time)

     注意事项:

    1)pytz模块需要安装:pip install pytz

  • 相关阅读:
    pinyin4j使用示例
    迭代器模式
    适配器模式
    策略模式
    装饰模式
    责任链模式
    命令模式
    中介者模式
    原型模式
    代理模式
  • 原文地址:https://www.cnblogs.com/reconova-56/p/14019544.html
Copyright © 2020-2023  润新知