1. Python 中的时间

  1. Python中,关于时间、日期处理的库有三个:timedatetimeCalendar。其中:datetime又有datetime.date/datetime.time/datetime.datetime三个类

1.1 时区

  1. 所有的时间都有一个时区。同样一个时间戳,根据不同的时区,它可以转换成不同的时间。
  2. pytz模块的common_timezones可以获取常用的表示时区的字符串。你可以通过pytz.timezone('timezone_str')来创建时区对象。 timezone

1.2 time 模块

  1. time模块中,时间有三种表现形式:

    • Unix时间戳。指的是从1970年以来的秒数
    • 本地时间的struct_time形式:一个命名元组,第一位为年、第二位为月….
    • UTC时间的struct_time的形式:类似于上面的,只是为UTC时间。区别在于:前者是本地时间local time,后者是UTC时间
  2. 查看当前时间的三种表现形式:

    • Unix时间戳: time.time()
    • local struct_timetime.localtime()
    • utc struct_timetime.gmtime()

    time_3kind_time

  3. 三种格式之间的转换:

    • timestamp--->local timetime.localtime(time_stamp)
    • timestamp--->utc timetime.gmtime(time_stamp)
    • local time--->timestamptime.mktime(local_time)
    • utc time---> timestampcalendar.timegm(utc_time)

    time_time_invert

  4. 三种格式的时间转换为字符串:

    • timestamptime.ctime(time_stamp)
    • local struct_time time/utc struct_time timetime.asctime(struct_time)

    • 对于local struct_time time/utc struct_time time:你也可以使用time.strftime(format_str,struct_time) 来自定义格式化串。其中format_str为格式化串。

    字符串转换为struct_timetime.strptime(time_str,format_str)。其中format_str为格式化串。 time_str_time

  5. 查看当前时区: time.timezone。它返回的是距离UTC时间的距离(单位为秒)(>0,在美洲;<=0,在大多数欧洲,亚洲,非洲)。你无法通过修改它的值来修改时区。time模块使用的是系统的时区。 time_timezone

1.3 datetime 模块

  1. datetime模块中主要包含四个类:

    • datetime.time:时间类。只包含时、分、秒、微秒等时间信息
    • datetime.date:日期类。值包含年月日星期等日期信息
    • datetime.datetime:日期时间类。包含上述两者的全部信息
    • datetime.timedelta:日期时间间隔类,用来表示两个datetime之间的差值。
  2. datetime.time的构造函数为:

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

    其中tzinfo就是时区对象。0<=hour<240<=minute<600<=second<600<=microsecond<1000000,否则抛出异常。tzinfo默认为None

属性有:

  • hour/minute/second/microsecond/tzinfo

方法有:

  • time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):替换对应的值,返回一个新的对象
  • time.isoformat():返回一个ISO 8601格式的字符串。
  • time.strftime(format):格式化datetime.time对象
  • time.tzname():如果时区为为None,则返回None。否则返回时区名称

datetime_time

  1. datetime.date的构造函数为:

    1. datetime.date(year, month, day)
    • month取值为[1,12]day取值为[1,num]num取决于指定的年和月有多少天

    类方法有:date.today()/date.fromtimestamp(timestamp)

    属性有:year/month/day

    方法有:

    • 运算:date1-date2date1+timedeltadate1-timedeltadate1<date2
    • date.replace(year,month,day):替换掉对应值,返回新对象
    • date.timetuple():返回一个time.struct_time类型的元组
    • date.weekday():返回代表星期几的数字。0为周日
    • date.isoweekday():返回代表星期几的数字。7为周日
    • date.isocalendar():返回一个元组(ISO year,IOS week num,ISO weekday)
    • date.isoformat():返回一个ISO 8601格式的字符串。
    • date.ctime():等价于time.ctime(time.mktime(d.timetuple()))
    • date.strftime(format):格式化datetime.date对象

    datetime_date

  2. datetime.datetime的构造函数为:

    1. datetime.datetime(year, month, day, hour=0, minute=0,
    2. second=0, microsecond=0, tzinfo=None)

    类方法有:

    • datetime.today():返回当前的时间日期
    • datetime.now(tz=None):返回指定时区当前的时间日期。如果tz=None,则等价于datetime.today()
    • datetime.utcnow():返回当前的UTC时间日期
    • datetime.fromtimestamp(timestamp, tz=None):根据时间戳,创建指定时区下的时间日期。
    • datetime.utcfromtimestamp(timestamp):根据时间戳,创建UTC下的时间日期。
    • datetime.combine(date, time):从datetime对象中创建datetime
    • datetime.strptime(date_string, format):从字符串中创建datetime

    属性有:year/month/day/hour/minute/second/microsecond/tzinfo

    方法有:

    • 运算:datetime1-datetime2datetime1+timedeltadatetime1-timedeltadatetime1<datetime2
    • datetime.date():返回一个date对象
    • datetime.time():返回一个time对象(该timetzinfo=None
    • datetime.timetz():返回一个time对象(该timetzinfodatetimetzinfo
    • datetime.replace([year[, month[, day[, hour[, minute[, second [, microsecond[, tzinfo]]]]]]]]):替换掉指定值,返回新对象
    • datetime.astimezone(tz=None) :调整时区。如果tz=None,则默认采用系统时区。注意,调整前后的UTC时间是相同的。
    • datetime.tzname():返回时区名字
    • datetime.timetuple():返回一个time.struct_time这样的命名元组
    • datetime.utctimetuple():返回一个time.struct_time这样的命名元组,注意它是在UTC时间下的,而不是local time下的
    • datetime.timestamp():返回一个时间戳
    • datetime.weekday():返回代表星期几的数字。0为周日
    • datetime.isoweekday():返回代表星期几的数字。7为周日
    • datetime.isocalendar():返回一个元组(ISO year,IOS week num,ISO weekday)
    • datetime.isoformat(sep='T'):返回一个ISO 8601格式的字符串。
    • datetime.ctime():等价于time.ctime(time.mktime(d.timetuple()))
    • datetime.strftime(format):格式化datetime.datetime对象。

    注意:不能将tzinfo=Nonetzinfo!=None的两个datetime进行运算。

  3. 下面是常用的格式化字符串的定义:

    • '%Y':4位数的年
    • '%y':2位数的年
    • '%m':2位数的月 [01,12]
    • '%d':2位数的日 [01,31]
    • '%H':小时(24小时制)[00,23]
    • '%I':小时(12小时制)[01,12]
    • '%M':2位数的分[00,59]
    • '%S':秒[00,61]61秒用于闰秒
    • '%w':用整数表示的星期几[0,6],0 表示星期日
    • '%U':每年的第几周[00,53]。星期天表示每周的第一天。每年的第一个星期天之前的那几天被认为是第 0 周
    • '%W':每年的第几周[00,53]。星期一表示每周的第一天。每年的第一个星期一之前的那几天被认为是第 0 周
    • '%z':以+HHMM或者-HHMM表示的UTC时区偏移量。如果未指定时区,则返回空字符串。
    • '%F':以%Y-%m-%d简写的形式
    • '%D':以%m/%d/%y简写的形式
    • '%a':星期几的简称
    • '%A':星期几的全称
    • '%b':月份的简称
    • '%B':月份的全称
    • '%c':完整的日期和时间

    • '%q':季度[01,04]

    datetime_datetime

  4. timedelta代表一段时间。其构造:

    1. datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,
    2. minutes=0, hours=0, weeks=0)

    在内部,只存储秒、微秒。其他时间单位都转换为秒和微秒。

实例属性(只读):

  • days/seconds/microseconds

实例方法:

  • timedelta.total_seconds():返回总秒数。

datetime_timedelta