zoukankan      html  css  js  c++  java
  • python内置模块-datetime

    摘录 廖雪峰网站

    datetime是python内置的处理日期和时间的标准库

    获取当前日期和时间

    >>> from datetime import datetime
    >>> print(datetime.now())
    2018-04-08 23:07:58.547082

    获取指定日期和时间

    >>> dt = datetime(2017,4,8,23,10)
    >>> print(dt)
    2017-04-08 23:10:00

    datetime转换为timestamp

    实际上,计算机中都是用数字表示时间的。1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。

    timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。

    标准的:

    timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00

    对应的北京时间为:

    timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00

    调用timestamp方法可以将一个datetime类型的数据转化为timestamp类型的数据:

    >>> dt = datetime(2017,4,8,23,10)
    >>> print(dt)
    2017-04-08 23:10:00
    >>> dt.timestamp()
    1491664200.0

    结果是一个浮点数,其中小数部分表示毫秒数。

    timestamp转化为datetime

    datetime的fromtimestamp()方法可以实现此功能:

    >>> t= 1491664200.0
    >>> print(datetime.fromtimestamp(t))
    2017-04-08 23:10:00

    其实,上述的转换是timestamp和本地时间之间的转换。而本地时间是指操作系统设置的时区时间。使用utcfromtimestamp()可以转换为格林威治标准时间:

    >>> print(datetime.utcfromtimestamp(t))
    2017-04-08 15:10:00

    字符串str转换为datetime

    >>> cday = datetime.strptime('2017-4-8 23:20:38','%Y-%m-%d %H:%M:%S')
    >>> print(cday)
    2017-04-08 23:20:38

    其中,字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式

    datetime转化为str

    >>> print(datetime.now().strftime('%a/%b/%d %H:%M'))
    Sun/Apr/08 23:28

    datetime的加减

    >>> from datetime import datetime,timedelta
    >>> now = datetime.now()
    >>> now + timedelta(hours=8)
    datetime.datetime(2018, 4, 9, 7, 30, 3, 485905)
    >>> now - timedelta(days=2)
    datetime.datetime(2018, 4, 6, 23, 30, 3, 485905)
    >>> now - timedelta(days=2,hours = 2)
    datetime.datetime(2018, 4, 6, 21, 30, 3, 485905)

    本地时间转换为UTC时间

    本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间是指UTC+0:00的时间。

    一个datetime类型的数据有一个时区属性tzinfo,默认为None,可以给datetime设置一个时区:

    >>> from datetime import datetime,timedelta,timezone
    >>> tz_utc_8 = timezone(timedelta(hours=8))
    >>> now = datetime.now()
    >>> now
    datetime.datetime(2018, 4, 9, 22, 17, 41, 334741)
    >>> dt = now.replace(tzinfo=tz_utc_8)
    >>> dt
    datetime.datetime(2018, 4, 9, 22, 17, 41, 334741, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

    时区转换

    可以通过utcnow()获得当前的UTC时间,在转换为任意时区的时间:

    >>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
    >>> print(utc_dt)
    2018-04-09 14:21:48.205455+00:00
    >>> bh_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
    >>> print(bh_dt)
    2018-04-09 22:21:48.205455+08:00
    >>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
    >>> print(tokyo_dt)
    2018-04-09 23:21:48.205455+09:00
    >>> tokyo_dt2 = bh_dt.astimezone(timezone(timedelta(hours=9)))
    >>> print(tokyo_dt2)
    2018-04-09 23:21:48.205455+09:00

    例子中,utc_dt是一个UTC时间,并强制设置时区为UTC+0:00。这是后续的时区转换的关键。

    astimezone()可以转换任意时区;

    bh_dt是东八区的时间;tokyo_dt和tokyo_dt2都是东九区的时间,前者是通过utc_dt转换的,后者是通过东八区的时间转换的

  • 相关阅读:
    出现 could not open jvm.cfg 的解决办法
    powerdesigner相关概念理解
    UML建模类图
    LAMP环境折腾
    ThinkPHP学习笔记1
    ubuntu14在kDE界面下的关于eclipse提示框黑色背景的修改!
    LAMP环境安装与apache配置
    Unix网络编程---第四次作业
    Unix网络编程---第三次作业
    Unix网络编程---第二次作业
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8763433.html
Copyright © 2011-2022 走看看