• python datetime 模块常用方法小结


    旨在记录python 中 datetime 模块常用的方法

    1. datetime 模块

    datatime 模块重新封装了time模块,提供更多接口,提供的类有:date, time, datetime, timedelta, tzinfo。

    1.1 date 类

    datetime.date(year, month, day)

    常用方法和属性:
    date.max、date.min:date对象所能表示的最大、最小日期;
    date.resolution:date对象表示日期的最小单位。这里是天。
    date.today():返回一个表示当前本地日期的date对象;
    date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
    

    1.2 time 类

    datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

    time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);
    time.resolution:时间的最小单位,这里是1微秒;
    
    t1 = datetime.time(15,20,50)#time对象
    t1.hour、t1.minute、t1.second、t1.microsecond:时、分、秒、微秒;
    t1.tzinfo:时区信息;
    t1.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);
    t1.isoformat():返回型如"HH:MM:SS"格式的字符串表示;
    t1.strftime(fmt):同time模块中的format;
    

    1.3 datetime 类

    datetime相当于date和time结合起来。

    datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

    datetime.today():返回一个表示当前本地时间的datetime对象;
    datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
    datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
    datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
    datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
    datetime.combine(date, time):根据date和time,创建一个datetime对象;
    datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
    

    1.4 timedelta类

    时间加减,使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算。

    #coding:utf-8
    import datetime
    
    now = datetime.datetime.now() # 获取当前时间  2020-02-16 15:20:01.752000
    # 获取前一小时
    before_one_hour = now + datetime.timedelta(hours=-1)
    print before_one_hour
    
    # 根据指定格式获取获取前一小时
    print before_one_hour.strftime('%Y-%m-%d %H') # 2020-02-16 14
    
    #获取前一天
    before_one_day = now + datetime.timedelta(days=-1)
    print before_one_day
    
    # 获取明天
    after_one_day = now + timedelta(days=1)
    print after_one_day
    

    1.5 tzinfo 类

    #! /usr/bin/env python
    # coding=utf-8
    
    from datetime import datetime, tzinfo,timedelta
    
    """
    tzinfo 是一个关于时区信息的抽象类,无法直接实例化,通过继承来实现
    """
    class UTC(tzinfo):
        """UTC"""
        def __init__(self,offset = 0):
            self._offset = offset
    
        def utcoffset(self, dt):
            return timedelta(hours=self._offset)
    
        def tzname(self, dt):
            return "UTC +%s" % self._offset
    
        def dst(self, dt):
            return timedelta(hours=self._offset)
    
    #北京时间
    beijing = datetime(2020,02,16,0,0,0,tzinfo=UTC(8))
    print "beijing time:",beijing
    #曼谷时间
    bangkok = datetime(2020,02,16,0,0,0,tzinfo=UTC(7))
    print "bangkok time",bangkok
    #北京时间转成曼谷时间
    print "beijing time transfer to bangkok time:",beijing.astimezone(UTC(7))
    
    #计算时间差时也会考虑时区的问题
    timespan = beijing - bangkok
    print "时差:",timespan
    
    #输出
    beijing time: 2020-02-16 00:00:00+08:00
    bangkok time 2020-02-16 00:00:00+07:00
    beijing time transfer to bangkok time: 2020-02-15 23:00:00+07:00
    时差: -1 day, 23:00:00
    

    2. time datetime timestamp之间的转换

    #  -*- coding: UTF-8 -*-
    # @Time: 2020/6/22 9:54
    # @FileName: datetime_service.py
    # @Project : project
    import datetime
    import time
    import random
    
    
    class DateTimeService(object):
        """
        日期,时间服务
        """
    
        @staticmethod
        def generate_random_time():
            """
            随机生成近一周某个时间点的时间戳
            :return:     某个时间点的时间戳和格式化时间
            """
            now = datetime.datetime.now()
            # 近一周的某个时间点  168 = 24h * 7
            delta = datetime.timedelta(hours=random.randint(0, 168))
            # past_time 格式 2020-06-19 19:19:38.568000
            past_time = now - delta
            fmt = "%Y%m%d%H%M%S"
            # 转换为timetuple()
            # time.struct_time(tm_year=2020, tm_mon=6, tm_mday=19, tm_hour=19, tm_min=19, tm_sec=38, tm_wday=4, tm_yday=171, tm_isdst=-1)
            time_tuple = datetime.datetime.timetuple(past_time)
            # (1592565578, '20200619191938')
            return int(time.mktime(time_tuple)), datetime.datetime.strftime(past_time, fmt)
    
    
    if __name__ == '__main__':
        print DateTimeService.generate_random_time()
    

    转换说明,参考: https://blog.csdn.net/yrx0619/article/details/84070819

    种一棵树最好的时间是十年前,其次是现在!
  • 相关阅读:
    MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
    MySQL 5.6 Replication 复制 FAQ
    MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
    Linux 系统命令备忘
    MySQL 自增列插入0值的方法
    【转载】将数据存储到SmartObject中
    【转载】使用C#代码发起K2 Blackpearl流程
    【转载】WorkFlow、BPM、SOA
    百度统计喻友平:谈如何更好的优化网站质量
    【转载】浅识K2 blackpearl中SmartObject
  • 原文地址:https://www.cnblogs.com/gaozhidao/p/12317049.html
Copyright © 2020-2023  润新知