一、标准库
1、import time
time模块中时间表现的格式主要有三种:
a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
b、struct_time时间元组,共有九个元素组。
c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
2、import datetime
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
二、格式名称
1、时间格式名称:时间戳
示例:1584039884.0
float格式
2、时间格式名称:结构化时间格式,时间元组
示例:time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=3, tm_min=9, tm_sec=0, tm_wday=4, tm_yday=73, tm_isdst=0)
获取方式:
# time.time() 得到的是float型时间戳 struct_time = time.localtime(time.time()) # 得到结构化时间格式
3、时间格式名称:format_time
示例:2016-10-26 16:48:41
获取方式:
# 生成format_time #struct_time to format_time time.strftime("%Y-%m-%d %X") time.strftime("%Y-%m-%d %X",time.localtime())
4、时间格式名称:datetime格式
示例:2020-03-13 03:02:13.469749
获取方式:
date_time = datetime.datetime.now() print(date_time)
5、ISO 8601标准(字符串)格林治时间格式
type:str
例如:2018-06-20T02:31:00Z
字母T ==> 代表使用UTC时间结尾;
字母Z ==> 4位数字格式的时间偏移量,不写的时候默认不偏移(当前时区),为Z的时候表示0时区:
获取方式:
date_time = datetime.datetime.now().isoformat() print(date_time)
6/UTC(世界协调时间格式)
例如:2020-03-31 16:00:00+00:00 (+时区)
class ‘pandas._libs.tslibs.timestamps.Timestamp’
二、格式转换
1、datetime格式转换成时间戳
ans_time = time.mktime(date_time.timetuple()) print(ans_time)
2、时间戳转年月日时间样式的字符串
# time.time() 得到的是float型时间戳 struct_time = time.localtime(time.time()) # 得到结构化时间格式 now_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
3、时间戳(float)转ISO 标准(字符串)格林治时间格式
timestamp是float类型(如:1627536136.0122457),小数点前10位表示秒,小数点后三位毫秒,后4-6位纳秒
如果float数据超过10位,如13位,要除1000
如果是16位,除以6
如果要保留毫秒,丢弃纳秒(2021-07-29T15:18:06.866)timestamp保留小数点后3位即可
round(timestamp/1000000,3)
dt_time = datetime.datetime.fromtimestamp(timestamp) # 转为datetime格式 '2021-07-29T14:04:41.037000'
# dt_time = datetime.datetime.fromtimestamp(timestamp).replace(microsecond=0) # 去掉微秒'2021-07-29T14:03:46'
# dt_time = datetime.datetime.fromtimestamp(timestamp).replace(tzinfo=datetime.timezone.utc) # 提供时区信息 '2021-07-29T14:05:40.526000+00:00'
iso_time = datetime.datetime.isoformat(dt_time) # 转为iso格式 type:str 2021-07-29T15:18:06.866223
iso_time = datetime.datetime.isoformat(dt_time)[:-3] + 'Z' # 转为iso,带Z,按字符串操作 2021-07-29T15:18:06.866Z
3、iso转换为时间戳
st = datetime.datetime.sprptime(isotime,'%Y-%m-%dT%H:%M:%S%z')
timestamp = int(time.mktime(st.timetuple()))
3、时间戳转字符串
struct_time = time.localtime(time.time()) # 得到结构化时间格式
now_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
4、datetime转字符串
import datetime as dt
date_time = datetime.datetime.now().timetuple()
time_str = datetime.strftime(data_time,'%Y%m%d%H%M%S')
# 方法2,批量转换
df['datetime'] = df['Day'].dt.strftime("%Y-%m-%d") # 好像要用dt,直接用datetime不行
说明:strftime只能转换struct_time格式,datetime格式用timetuple()返回日期对应的time.struct_time对象;否则出现TypeError: Tuple or struct_time argument required
strftime:str from time
5、字符串转struct_time
time_rel = datetime.strptime(time_str,’%Y-%m-%d %H:%M:%S’)
strptime:str
strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。
6、datetime格式转ISO 8601格式
目标格式为‘2018-06-20T02:31:00Z’的字符串
date_time = datetime.datetime.now() date_time_iso = datetime.strftime(date_time, '%Y-%m-%dT%H:%M:%SZ') print(date_time_iso)
8、时间格式由 2020-06-05 00:00:00 转为 2020-06-05T00:00:00Z(字符串格式转字符串格式)
start_time = '2020-06-05 00:00:00'
start_time_datetime = pd.to_datetime(start_time)
date_time_iso = datetime.strftime(start_time_datetime, '%Y-%m-%dT%H:%M:%SZ')
# 方法2,批量处理
df3.index = df3.index.map(lambda x: dt.datetime.strftime(x, '%Y-%m-%dT%H:%M:%SZ'))
10、2020-06-24T02:50:00.165Z字符串转成2020-06-24 02:50:00
df['time'] = pd.to_datetime(df['time']).dt.strftime("%Y-%m-%d %H:%M:%S")
三、series格式时间转换
3.1dataframe整列时间转换
df[‘time’] = pd.to_datetime(df[‘time’])
实际获得格式class ‘pandas._libs.tslibs.timestamps.Timestamp’
3.2格式特殊,按格式转换
df[‘time’] = pd.to_datetime(df[‘time’], format=’%Y-%m-%dT%H:%M:%S.000Z’)
3.3 整列时间戳转
df['Time'] = pd.to_datetime(df['Time']/1000, unit='s')
# unit='s', 'ms','D'
转换前series里是float,注意长度和unit要匹配,不匹配/1000或*1000看看
转换后<class ‘pandas._libs.tslibs.timestamps.Timestamp’>
四、特殊时间获取
当天零点时间:
now_time = datetime.datetime.now()
date_time = now_time - datetime.timedelta(hours=now_time .hour, minutes=now_time .minute, seconds=now_time.second, microseconds=now_time.microsecond)