原则,以datetime为中心,起点或中转,转化为目标对象,涵盖了大多数业务场景中需要的日期转换处理。

步骤:

  1. 掌握几种对象及其关系
  2. 了解每类对象的基本操作方法
  3. 通过转化关系转化

涉及对象:

  1. datetime
import datetime
now = datetime.datetime.now()
type(now)
  1. timestamp
import time
time.time()
  1. 时间元组 (time tuple)
import time
time.localtime()
  1. 字符串 (string)
import datetime
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1. 日期 (date)
import datetime
datetime.datetime.now().date()

datetime基本操作:

  1. 获取当前datetime
import datetime
datetime.datetime.now()
  1. 获取当天date
datetime.date.today()
  1. 获取明天/前N天

明天:

datetime.date.today() + datetime.timedelta(days=1)

三天前:

datetime.datetime.now() - datetime.timedelta(days=3)
  1. 获取当天开始和结束时间 (00:00:00 - 23:59:59)
datetime.datetime.combine(datetime.date.today(), datetime.time.min)
datetime.datetime.combine(datetime.date.today(), datetime.time.max)
  1. 获取两个datetime的时间差
(datetime.datetime(2015,1,13,12,0,0) - datetime.datetime.now()).total_seconds()
  1. 获取本周/本月/上月最后一天

本周:

today = datetime.date.today()
sunday = today + datetime.timedelta(6 - today.weekday())

本月:

import calendar
today = datetime.date.today()
_, last_day_num = calendar.monthrange(today.year, today.month)
last_day = datetime.date(today.year, today.month, last_day_num)

获取上个月的最后一天(可能跨年):

today = datetime.date.today()
first = datetime.date(day=1, month=today.month, year=today.year)
lastMonth = first - datetime.timedelta(days=1)

关系转换:
几个关系之间的转化:Datetime Object / String / timestamp / time tuple

关系转换例子:
datetime <=> string

datetime -> string

import datetime
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

string -> datetime

import datetime
datetime.datetime.strptime("2014-12-31 18:20:10", "%Y-%m-%d %H:%M:%S")

datetime <=> timetuple

datetime -> timetuple

import datetime
datetime.datetime.now().timetuple()

timetuple -> datetime

# timetuple => timestamp => datetime [看后面datetime<=>timestamp]

datetime <=> date

datetime -> date

import datetime
datetime.datetime.now().date()

date -> datetime

datetime.date.today()
today = datetime.date.today()
datetime.datetime.combine(today, datetime.time())
datetime.datetime.combine(today, datetime.time.min)

datetime <=> timestamp

datetime -> timestamp

now = datetime.datetime.now()
timestamp = time.mktime(now.timetuple())
timestamp

timestamp -> datetime

datetime.datetime.fromtimestamp(1421077403.0)