# -*- coding:utf-8 -*-
import pandas as pd
import time
import datetime start_date = '2020-06-08'
# 一、将字符串文本类型转化为时间
# %Y-%m-%d 为自定义时间格式,也可设置成完整格式:%Y-%m-%d %H:%M:%S,若使用完整格式,输入的start_date的文本格式也要完整对应,否则报错
# 1.使用datetime包
date_time = datetime.datetime.strptime(start_date, '%Y-%m-%d') # 转化后的时间是带有时分秒的
print(date_time) # 2020-06-08 00:00:00
print(type(date_time)) # <class 'datetime.datetime'>
"""
datetime模块中主要使用的是:
datetime.date:日期(2020-01-01)
datetime.time:时间(12:00:00)
datetime.datetime:时期(2020-01-01 12:00:00)
"""
# 2.使用time包中的time.strptime
time_time = time.strptime(start_date, '%Y-%m-%d') # 返回struct_time对象。
print(time_time)
print(type(time_time)) # <class 'time.struct_time'>
"""
参数解释:time.struct_time(tm_year=年, tm_mon=月, tm_mday=日, tm_hour=时, tm_min=分, tm_sec=秒,
tm_wday=星期(0-6),星期一为0, tm_yday=一年中第几天, tm_isdst=-1是否是夏令时,1-夏令时,0-非夏令时 -1-不确定,默认是-1)
""" # 3.直接使用pandas的to_datetime(文本)--主要用来处理组数据
pd_time = pd.to_datetime(start_date) # 转化后的时间是带有时分秒的
print(pd_time) # 2020-06-08 00:00:00
print(type(pd_time)) # <class 'pandas._libs.tslibs.timestamps.Timestamp'> # 从上述时间类型中提取某个字段数据出来 ,其他字段类似.year/month/day/weekday()/isoweekday()返回的1-7代表周一--周日/。。。
print(date_time.month)
print(time_time.tm_yday)
print(pd_time.weekday())
# 若转化一列数据的时间类型使用:pd.to_time(文件['列名']) ,此时若提取其中数据字段:文件['列名'].dt.month/year...(ps:后面内容有涉及)
 # 例如:
df = pd.read_excel('./北京天气2018.xls') # 读取 北京天气2018.xls文件
pd.to_datetime(df['日期']) # 将日期这一列变成时间类型
print(df['日期'].dt.month) # 使用.dt提取日期属性 # 二、将时间格式转为字符串
# 1.使用str或 strftime
print(str(pd_time))
print(type(str(pd_time))) str_time1 = date_time.strftime('%Y-%m-%d %H:%M:%S')
print(str_time1) # 2020-06-08 00:00:00
print(type(str_time1)) str_time2 = pd_time.strftime('%Y-%m-%d %H:%M')
print(str_time2) # 2020-06-08 00:00
print(type(str_time2)) # 2.time包时间格式的转换
str_time3 = time.strftime('%Y-%m-%d', time_time)
print(str_time3) # 2020-06-08
print(type(str_time3)) # <class 'str'>
 # 三、时间的计算
import pandas as pd
import time
import datetime # 1.简单的时间计算
start_date = '2020-06-08 10:00:00'
end_date = '2020-06-10 15:30:00'
start_time = datetime.datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(end_date, '%Y-%m-%d %H:%M:%S')
during_time = end_time - start_time
# during_time = pd.to_datetime(end_date) - pd.to_datetime(start_date)
# 这里不适宜使用time.strptime时间化,因为time.struct_time无法进行计算
print(during_time) # 2 days, 5:30:00
print(during_time.days) #
print(during_time.seconds) # 小时之间相差的秒数19800
print(during_time.total_seconds()) # 总共相差的秒数192600.0 # 2.timedelta时间计算
# timedelta --datetime模块下的,主要是用于日期计算的,代表两个时间之间的时间差,两个date或datetime对象相减就可返回一个timedelta对象
# 在需要使用到时间间隔的时候非常有用,例如需要上一个月,前一天,上一周这样的日期,就可以使用datetime和timedelta很容易得到。
# datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
today = datetime.datetime.today()
# today = datetime.date.today() 只有年月日的日期
# 上个月最后一天
last_month_last_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
print(last_month_last_day)
# 上个月的第一天
print(datetime.date(last_month_last_day.year, last_month_last_day.month, 1)) # 2020-05-01
# 一周之前
print(today - datetime.timedelta(7))
print(today - datetime.timedelta(weeks=1)) # 等价
# 3小时30分钟之前--其他类似
print(today - datetime.timedelta(hours=3, minutes=30))
print(datetime.timedelta(hours=3, seconds=22).total_seconds()) # 3小时22秒的总秒数 10822.0
# 8小时30秒后
print(today + datetime.timedelta(hours=8, seconds=30))
# 本周一
this_monday = today - datetime.timedelta(today.isoweekday() - 1) # .isoweekday()返回的1-7代表周一--周日
print(this_monday)
# 本周二 --其他类似
print(today - datetime.timedelta(today.isoweekday() - 2))
# 本周日
this_sunday = today - datetime.timedelta(today.isoweekday() - 7)
print(this_sunday)
# 上周一
print(this_monday-datetime.timedelta(weeks=1))
print(this_monday-datetime.timedelta(7)) # 等价
# 上周日
print(this_sunday-datetime.timedelta(weeks=1)) # 3.pandas模块对时间的处理
# 有下面一数据
data = {'date': ['2020-05-29', '2020-05-30', '2020-05-31', '2020-06-01', '2020-06-02', '2020-06-03', '2020-06-04',
'2020-06-05', '2020-06-06', '2020-06-07', '2020-06-08', '2020-06-09'],
'lower_temp': [17, 18, 22, 22, 23, 22, 22, 21, 21, 22, 22, 24],
'high_temp': [25, 19, 28, 30, 33, 28, 30, 23, 28, 29, 28, 29]
}
df = pd.DataFrame(data)

 # 3.1.根据原数据类型进行查询
# 设定date为索引(即设置date列为行名),方便按日期筛选--date为字符串文本类型
# 下面输入的'2020-06-01'等日期是字符串文本类型,因此索引的类型也要字符串文本类型,否则无法匹配寻找
# date若为时间类型可先进行转换文本:df['date'] = df['date'].dt.strftime('%Y-%m-%d')
df.set_index('date', inplace=True)

# (1)使用单个日期
print(df.loc['2020-06-01', :]) # :表示是所有列
print(df.loc['2020-06-01', 'high_temp'])
print(df.loc['2020-06-01', 'lower_temp':'high_temp']) # 'lower_temp'至'high_temp'列
# (2)使用多个日期
print(df.loc[['2020-06-01', '2020-06-05'], 'high_temp']) # 6-1,6-5的高温high_temp
print(df.loc['2020-06-01':'2020-06-05', 'high_temp']) # 6-1至6-5的高温high_temp # 3.2.转化为时间类型进行查询
# (1)对date时间这一列转为时间格式
df['date'] = pd.to_datetime(df['date'])
# (2)筛选某个时间片段
print(df.loc[df['date'] == pd.to_datetime('2020-06-03')]) # 6.3的数据
print(df.loc[df['date'] >= pd.to_datetime('2020-06-03')]) # 6.3之后的数据
# 筛选满足多个条件的数据--条件之间用&连接
print(df.loc[(df['date'] >= pd.to_datetime('2020-06-03')) & (df['date'] <= pd.to_datetime('2020-06-05'))]) # 6.3-6.5数据
print(df.loc[(df['date'] >= pd.to_datetime('2020-06-01')) & (df['high_temp'] >= 30)]) """
# 若是设置date时间格式列为索引,上述代码要改写
df.set_index('date', inplace=True)
print(df.loc[pd.to_datetime('2020-06-03')])
print(df.loc[:pd.to_datetime('2020-06-03'), :]) # 6.3之前的数据
print(df.loc[pd.to_datetime('2020-06-03'):, :]) # 6.3之后的数据
print(df.loc[pd.to_datetime('2020-06-03'):pd.to_datetime('2020-06-05'), :]) # 6.3-6.5数据
"""
# (3)判断某个日期是周几、出现的次数等等。。。
print(df['date'].dt.weekday) # 直接显示date这一列的星期数0-6周一-周日
print(df['date'].dt.is_month_start) # 判断是否是一个月的开始
print(df['date'].dt.is_month_end) # 判断是否是一个月的结束
print(df['date'].dt.is_leap_year) # 判断是否闰年
print(df['date'].dt.year.value_counts()) # 判断年出现的次数
print(df['date'].dt.month.value_counts()) # 判断月出现的次数 # (4对日期增减
import dateutil # 导入新库
# 增加1天(减少天用-号)
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(days=1)) # 2020-06-04 00:00:00
# 增加2年
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(years=2)) # 2022-06-03 00:00:00
# 对月/时/分/秒增加直接将变量名改为months/hours/minutes/seconds 即可
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(years=2, days=50, minutes=10)) # 2022-07-23 00:10:00
# 若将参数变成单数year/day/month/hour/minute/second 并不是日期的加减,而是将日期对应值变成所设置的参数值
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(year=1991, day=5, minute=10)) # 1991-06-05 00:10:00

 

二、Python系列——time时间格式的转换及计算的更多相关文章

  1. python 时间戳和时间格式互相转换

    #!/usr/bin/python3 # -*- coding: utf-8 -* import time def str_to_stamp(): # 转换显示格式 time1 = time.strp ...

  2. SQL Server 时间戳与时间格式互相转换

    时间戳(Unix timestamp) 是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数. Unix时间戳不仅被使用在Unix系统.类Unix系统中,也 ...

  3. J实现时间格式的转换(附加对象的转换)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. python datetime,time时间格式和用法

    我是转载的这个大神的   他的网址:https://www.cnblogs.com/wanglinjie/p/9226926.html #以下是time的方法 >>> import ...

  5. mssql sqlserver时间戳与时间格式互相转换的方法分享

    转自: http://www.maomao365.com/?p=9336 摘要: 下文讲述mssql中时间戳和时间格式的转换方法,如下所示: 实验环境:sql server 2008 R2 时间戳简介 ...

  6. python 字符串和时间格式(datetime)相互转换-

    2019-03-17 11:00:00格式转化 import datetime # str转时间格式: dd = '2019-03-17 11:00:00' dd = datetime.datetim ...

  7. python中时间对象生成及时间格式的转换

    1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 import time timeArray = time.strpt ...

  8. python转换时间戳和日期时间格式的转换

    [steven@txzxp2 seccenter]$ python Python 2.7.5 (default, Jul  8 2013, 09:48:59)  [GCC 4.8.1 20130603 ...

  9. js 获取当前时间格式怎么转换?

    toLocaleDateString() 得到的时间是 yyyy年MM月dd日 HH:ss:mm 格式的,怎么转换成yyyy-MM-dd HH:ss:mm 在js里面 仅针对这个问题来说,不需要那么大 ...

随机推荐

  1. VS Code WebApi系列——2、jwt结合数据库校验

    Knowledge should be shared free. 我们都知道WebApi最重要的作用就是为外部服务提供相应的数据接口和服务,所以一般WebApi都会连接后台数据库,那么最重要的一件事就 ...

  2. 04.开发REST 接口

    使用Django开发REST 接口 我们以在Django框架中使用的图书英雄案例来写一套支持图书数据增删改查的REST API接口,来理解REST API的开发. 在此案例中,前后端均发送JSON格式 ...

  3. 【Mongodb】 可复制集搭建

    可复制集 replica set 概念图 可复制集需要至少3个以上的mongodb节点,其中有一个主节点promary,其余的为副本节点secondary 可复制集有三个角色: 主要成员(Primar ...

  4. 四层发现-TCP和UDP发现简介

    虽然这里使用到了端口发现,但是四层发现阶段并不对端口进行解析,而是通过端口进行对ip是否存活的判断. 这里是对主机的发现,而不是对端口的识别. 四层发现的结果比三层发现的结果更加精确,基本不会被防火墙 ...

  5. Java wait 和 sleep 的区别

    一.区别 sleep 来自 Thread 类,和 wait 来自 Object 类 sleep 方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或方法 wait,notify和 ...

  6. MongoDB入门四

    MongoDB针对实时位置 db.CallRecordInfo.find().count()db.SendInfo.find().count()db.RiderReaTimePositon.find( ...

  7. Springboot--元注解及自定义注解(表单验证)

    本文简单说明一下元注解,然后对元注解中的@Retention做深入的讨论,在文章最后使用元注解写一个自定义注解来结尾. 一.结论: @Target:注解的作用目标 @Target(ElementTyp ...

  8. slow SQL

    一.介绍 慢查询日志可用于查找需要很长时间才能执行的查询,因此是优化的候选者.但是,检查长慢的查询日志可能是一项耗时的任务. 二.配置 # 查看: slow_query_log 慢SQL开关 slow ...

  9. VC单选按钮控件(Radio Button)用法(转)

    先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDi ...

  10. 解决SELinux阻止Nginx访问服务

    在使用 yum 安装 nginx 后可能会出现配置完成后却无法访问的问题,查看 audit.log 会发现类似于以下的错误信息 出现此问题的原因是 SELinux 基于最小权限原则默认拦截了 Ngin ...