“时间”经常会被处理,用的不会会比较复杂,以前主要用time模块,现在感觉datetime更好用,记录下常用的功能
datetime模块包含
datetime模块定义了以下几个类:
1. 通过datetime转换
from datetime import datetime
import time
time1 = "2019-01-01 21:08:01"
# 转为时间戳time.mktime只能转换struct_time
In [137]: # 通过datetime转换
In [138]: datetime.strptime(time1,"%Y-%m-%d %H:%M:%S").timetuple()
Out[138]: time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=21, tm_min=8, tm_sec=1, tm_wday=1, tm_yday=1, tm_isdst=-1)
In [139]: time.mktime(datetime.strptime(time1,"%Y-%m-%d %H:%M:%S").timetuple())
Out[139]: 1546348081.0
In [140]: # 通过time转换 import time
In [141]: time.strptime(time1, "%Y-%m-%d %H:%M:%S")
Out[141]: time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=21, tm_min=8, tm_sec=1, tm_wday=1, tm_yday=1, tm_isdst=-1)
注: 上面的struct_time中的 tm_wday 从0开始计数的
2. 将时间戳格式化 (没找到datetime的方式)
In [170]: import time
In [171]: time.localtime(time.time())
Out[171]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=7, tm_hour=19, tm_min=35, tm_sec=56, tm_wday=2, tm_yday=219, tm_isdst=0)
In [173]: time.strftime("%Y-%m-%d", time.localtime(time.time()))
Out[173]: '2019-08-07'
ps: datetime的使用
In [180]: datetime.now()
Out[180]: datetime.datetime(2019, 8, 7, 19, 40, 55, 623142)
In [187]: datetime.strftime( datetime.now(), "%Y-%m")
Out[187]: '2019-08'
综上:
1. time的strftime、strptime是将struct_time格式转化
2. datetime的strftime、strptime是将datetime格式转化 # datetime.datetime(2019, 8, 7, 19, 40, 55, 623142)
3. strptime和strftime都要写入 - 参数:"%Y-%m-%d",不同的是strptime的参数要严格按照输入的形式,例如这样就不行datetime.strptime("2018-09", "%Y");strftime只要输出你想要内容
4. datetime的 参数:"%Y-%m-%d" 写在后面,time则一前一后
数据迁移由于数据量大,需要分天或者分小时处理,需要使用datetime.timedelta()
In [199]: from datetime import datetime; from datetime import timedelta
In [201]: datetime.strftime(datetime.now(),"%Y-%m-%d")
Out[201]: '2019-08-07'
In [202]: stime = datetime.strftime(datetime.now(),"%Y-%m-%d")
In [203]: stime
Out[203]: '2019-08-07'
In [204]: etime = datetime.strftime(datetime.now() - timedelta(3),"%Y-%m-%d")
# 这是3天一同步,还可以减去小时,分钟,秒数进行同步 timedelta(hours=1,seconds=2,minutes=3)
In [205]: etime
Out[205]: '2019-08-04'
# sql = "select * from table where dt >='{}' and dt <'{}'".format(stime,etime)