[关闭]
@yanglt7 2018-12-03T10:32:58.000000Z 字数 2364 阅读 624

Python23_datetime

Python


获取当前日期和时间

  1. >>> from datetime import datetime
  2. >>> now = datetime.now() # 获取当前datetime
  3. >>> print(now)
  4. 2015-05-18 16:28:07.198690
  5. >>> print(type(now))
  6. <class 'datetime.datetime'>

获取指定日期和时间

  1. >>> from datetime import datetime
  2. >>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
  3. >>> print(dt)
  4. 2015-04-19 12:20:00

datetime 转换为 timestamp

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

把一个 datetime 类型转换为 timestamp 只需要简单调用 timestamp() 方法:

  1. timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00
  2. timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00
  3. >>> from datetime import datetime
  4. >>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建 datetime
  5. >>> dt.timestamp() # 把 datetime 转换为 timestamp
  6. 1429417200.0

timestamp 转换为 datetime

要把 timestamp 转换为 datetime,使用 datetime 提供的 fromtimestamp() 方法:

  1. >>> from datetime import datetime
  2. >>> t = 1429417200.0
  3. >>> print(datetime.fromtimestamp(t))
  4. 2015-04-19 12:20:00

上述转换是在 timestamp 和本地时间做转换。

timestamp 也可以直接被转换到 UTC 标准时区的时间:

  1. >>> from datetime import datetime
  2. >>> t = 1429417200.0
  3. >>> print(datetime.fromtimestamp(t)) # 本地时间
  4. 2015-04-19 12:20:00
  5. >>> print(datetime.utcfromtimestamp(t)) # UTC时间
  6. 2015-04-19 04:20:00

str 转换为 datetime

转换方法是通过 datetime.strptime() 实现,需要一个日期和时间的格式化字符串:转换后的 datetime 是没有时区信息的。

  1. >>> from datetime import datetime
  2. >>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
  3. >>> print(cday)
  4. 2015-06-01 18:19:59

datetime 加减

对日期和时间进行加减实际上就是把 datetime 往后或往前计算,得到新的 datetime。加减可以直接用 + 和 - 运算符,不过需要导入 timedelta 这个类:

  1. >>> from datetime import datetime, timedelta
  2. >>> now = datetime.now()
  3. >>> now
  4. datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
  5. >>> now + timedelta(hours=10)
  6. datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
  7. >>> now - timedelta(days=1)
  8. datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
  9. >>> now + timedelta(days=2, hours=12)
  10. datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)

时区转换

我们可以先通过 utcnow() 拿到当前的 UTC 时间,再转换为任意时区的时间:

  1. # 拿到UTC时间,并强制设置时区为UTC+0:00:
  2. >>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
  3. >>> print(utc_dt)
  4. 2015-05-18 09:05:12.377316+00:00
  5. # astimezone()将转换时区为北京时间:
  6. >>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
  7. >>> print(bj_dt)
  8. 2015-05-18 17:05:12.377316+08:00
  9. # astimezone()将转换时区为东京时间:
  10. >>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
  11. >>> print(tokyo_dt)
  12. 2015-05-18 18:05:12.377316+09:00
  13. # astimezone()将bj_dt转换时区为东京时间:
  14. >>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
  15. >>> print(tokyo_dt2)
  16. 2015-05-18 18:05:12.377316+09:00
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注