常用的库有time、datetime。其中datetime库是对time库的封装,所以使用起来更加便捷。date是指日期时间(年月日)处理,time往往更加细小的单位(小时分秒等)的时间处理。

一、datetime

  • datetime.date

表示日期的类,常用的属性有year、month、day。参数都为整数。

  1. import datetime
  2.  
  3. #任何一天
  4. someday = datetime.date(year=2018,month=1,day=1)
  5. someday
  6. datetime.date(2018, 1, 1)

日期的标准化格式符号

  1. %a  星期的简写。如 星期三为Web
  1. %A  星期的全写。如 星期三为Wednesday
  1. %b  月份的简写。如4月份为Apr
  1. %B  月份的全写。如4月份为April
  1. %c:  日期时间的字符串表示。(如: 04/07/10 10:43:39
  1. %d:  日在这个月中的天数(是这个月的第几天)
  1. %f:  微秒(范围[0,999999]
  1. %H:  小时(24小时制,[0, 23]
  1. %I:  小时(12小时制,[0, 11]
  1. %j:  日在年中的天数 [001,366](是当年的第几天)
  1. %m:  月份([01,12]
  1. %M:  分钟([00,59]
  1. %p:  AM或者PM
  1. %S:  秒(范围为[00,61],为什么不是[00, 59]
  1. %U:  周在当年的周数当年的第几周),星期天作为周的第一天
  1. %w:  今天在这周的天数,范围为[0, 6]6表示星期天
  1. %W:  周在当年的周数(是当年的第几周),星期一作为周的第一天
  1. %x:  日期字符串(如:04/07/10
  1. %X:  时间字符串(如:10:43:39
  1. %y:  2个数字表示的年份
  1. %Y:  4个数字表示的年份
  1. %z:  utc时间的间隔 (如果是本地时间,返回空字符串)
  1. %Z:  时区名称(如果是本地时间,返回空字符串)

以规定的格式返回。

  1. print(someday.strftime('%Y-%m-%d'))
  2. 2018-01-01
  3.  
  4. print(someday.strftime('%Y/%m/%d'))
  5. 2018/01/01

生成如‘2018-01-01’

  1. someday.isoformat()
  2. '2018-01-01'

今天

  1. datetime.date.today()
  2. datetime.date(2018, 2, 27)

根据给定的时间戮,返回一个date对象

  1. import time
  2.  
  3. datetime.date.fromtimestamp(time.time())
  4. datetime.date(2018, 1, 4)
  • datetime.time

表示时间的类,参数包括hour、minute、second、microsecond。 time类的方法同datetime类。

看看isoformatstrftime方法会返回什么

  1. sometime = datetime.time(hour=12,minute=50,second=12,microsecond=10)
  2. sometime
  3. datetime.time(12, 50, 12, 10)

时间的格式化处理

  1. print(sometime.isoformat())
  2. 12:50:12.000010
  3.  
  4. print(sometime.strftime('%H:%M:%S'))
  5. 12:50:12
  6.  
  7. print(sometime.strftime('%H::%M::%S'))
  8. 12::50::12
  • datetime.datetime

日期实践类,常用的参数包含year、month、day、hour、minute、second、microsecond。但是至少要包含year、month、day三个参数。

  1. datetime.datetime(year=2018,month=1,day=1,hour=12,minute=50,second=12,microsecond=10)
  2. datetime.datetime(2018, 1, 1, 12, 50, 12, 10)

只含有年月日

  1. datetime.datetime(2018,1,1)
  2. datetime.datetime(2018, 1, 1, 0, 0)

看看isoformatstrftime方法会返回什么

  1. somedatetime = datetime.datetime(2018,1,1)
  2.  
  3. #isoformat、strftime
  4. print(somedatetime.isoformat())
  5. 2018-01-01T00:00:00
  6.  
  7. print(somedatetime.strftime('%Y-%m-%d %H:%M:%S'))
  8. 2018-01-01 00:00:00
  • datetime.timedelta

表示时间间隔类,给一个时间点加上此类,即可得到一个新的时间。参数包含days、hours、minutes、seconds、microseconds。

  1. #1天零1小时零1分零1秒又10毫秒的时间间隔
  2.  
  3. datetime.timedelta(days=1,hours=1,minutes=1,seconds=1,microseconds=10)
  4. datetime.timedelta(1, 3661, 10)

35天间隔

  1. datetime.timedelta(days=35)
  2. datetime.timedelta(35)

现在+/-时间间隔操作

  1. print(datetime.datetime.now())
  2. 2018-01-04 23:59:37.437627
  3.  
  4. print(datetime.datetime.now()+datetime.timedelta(days=35))
  5. 2018-02-08 23:59:37.438283
  6.  
  7. print(datetime.datetime.now()-datetime.timedelta(days=35))
  8. 2017-11-30 23:59:37.438775
  9.  
  10. print(datetime.datetime.now()-datetime.timedelta(hours=10))
  11. 2018-01-04 13:59:37.438987
  12.  
  13. print(datetime.datetime.now()-datetime.timedelta(hours=10,days=1))
  14. 2018-01-03 13:59:37.439190

二、time

常用的方法有time、localtime

  1. import time
  2.  
  3. timestamp = time.time()
  4. print('时间戳: ',timestamp)
  5. 时间戳: 1515081476.966094
  6.  
  7. locaoltime = time.localtime(timestamp)
  8. print('当地时间: ',locaoltime)
  9. 当地时间: time.struct_time(tm_year=2018, tm_mon=1, tm_mday=4, tm_hour=23, tm_min=57, tm_sec=56, tm_wday=3, tm_yday=4, tm_isdst=0)
  10.  
  11. #转化为有格式的时间,如只显示年月日
  12. print(time.strftime('%Y-%m-%d %H:%M:%S',locaoltime))
  13. 2018-01-04 23:57:56

三、pandas库时间处理函数

获取当前时间,并返回年月日规范格式。形如 2017-01-04

常用的方法有:

  1. pd.date_range() 生成一个时间段
  1. pd.bdate_range() 生成一个时间段,跟date_range()不同,可见下面代码
  1. df.asfreq() 生成以一定时间间隔的序列
  • 根据始末时间生成时间段

pd.date_range(start, end, freq) 生成一个时间段

freq参数由英文(M D H Min 。。。)、英文数字结合。D表示一天,M表示一月如20D表示20天,5M表示5个月。

  1. #生成20171011-20171030
  2. pd.date_range('20171011', '20171030',freq='5D')
  3. DatetimeIndex(['2017-10-11', '2017-10-16', '2017-10-21', '2017-10-26'], dtype='datetime64[ns]', freq='5D')
  • 根据起始向后生成时间段

pd.date_range(日期字符串, periods=5, freq='T') 生成一个时间段

periods 时间段长度,整数类型

freq 时间单位。月日时分秒。M D H ...

  1. import pandas as pd
  2. #20171231 12:50时间点开始,生成以月为间隔,长度为5的时间段
  3. tm_rng = pd.date_range('20171231 12:50',periods=5,freq='M')
  4.  
  5. print(type(tm_rng))
  6. DatetimeIndex(['2017-12-31 12:50:00', '2018-01-31 12:50:00','2018-02-28 12:50:00', '2018-03-31 12:50:00',
  7.  
  8. print(tm_rng)
  9. <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
  10. '2018-04-30 12:50:00'],dtype='datetime64[ns]', freq='M')
  • 根据给定时间点向前(向后)生成时间段

pd.bdate_range(end,periods,freq) 根据end时间点开始,以freq为单位,向前生成周期为period的时间序列

pd.bdate_range(start,periods,freq) 根据start时间点开始,以freq为单位,向后生成周期为period的时间序列

  1. #向前5天
  2. print(pd.bdate_range(end='20180101',periods=5,freq='D'))
  3. DatetimeIndex(['2017-12-28', '2017-12-29', '2017-12-30', '2017-12-31','2018-01-01'],dtype='datetime64[ns]', freq='D')
  4.  
  5. #向后5天
  6. print(pd.bdate_range(start='20180101',periods=5,freq='D'))
  7. DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04','2018-01-05'],dtype='datetime64[ns]', freq='D')

改变时间间隔

  1. dateframe或者series对象操作,更改对象中时间的时间间隔。
    dateframe.asfreq(freq='时间间隔',method='填充方式',fill_value='对Nan值进行填充')
    freq格式:M D H Min 。。。与数字结合。如20D表示20天,5M表示5个月。 
    method:有padbackfill两种填充方式
    fill_value:缺失值更改为fill_value的值。
  1. #改变时间间隔,以20天为间隔
  2. tm_series.asfreq('20D',method='pad')
  3. 2017-12-31 12:50:00 0
  4. 2018-01-20 12:50:00 0
  5. 2018-02-09 12:50:00 1
  6. 2018-03-01 12:50:00 2
  7. 2018-03-21 12:50:00 2
  8. 2018-04-10 12:50:00 3
  9. 2018-04-30 12:50:00 4
  10. Freq: 20D, dtype: int64
  11.  
  12. #改变时间间隔,以20天为间隔
  13. tm_series.asfreq('20D',method='backfill')
  14. 2017-12-31 12:50:00 0
  15. 2018-01-20 12:50:00 1
  16. 2018-02-09 12:50:00 2
  17. 2018-03-01 12:50:00 3
  18. 2018-03-21 12:50:00 3
  19. 2018-04-10 12:50:00 4
  20. 2018-04-30 12:50:00 4
  21. Freq: 20D, dtype: int64
  22.  
  23. #改变时间间隔,以100小时为间隔
  24. tm_series.asfreq('100H')
  25. 2017-12-31 12:50:00 0.0
  26. 2018-01-04 16:50:00 NaN
  27. 2018-01-08 20:50:00 NaN
  28. 2018-01-13 00:50:00 NaN
  29. .....
  30. 2018-04-10 12:50:00 NaN
  31. 2018-04-14 16:50:00 NaN
  32. 2018-04-18 20:50:00 NaN
  33. 2018-04-23 00:50:00 NaN
  34. 2018-04-27 04:50:00 NaN
  35. Freq: 100H, dtype: float64
  36.  
  37. #改变时间间隔,以100小时为间隔
  38. tm_series.asfreq('100H',fill_value='缺失值')
  39. 2017-12-31 12:50:00 0
  40. 2018-01-04 16:50:00 缺失值
  41. 2018-01-08 20:50:00 缺失值
  42. 2018-01-13 00:50:00 缺失值
  43. .....
  44. 2018-04-14 16:50:00 缺失值
  45. 2018-04-18 20:50:00 缺失值
  46. 2018-04-23 00:50:00 缺失值
  47. 2018-04-27 04:50:00 缺失值
  48. Freq: 100H, dtype: object
  • 可以统一日期格式

  1. data = pd.Series(['May 20, 2017','2017-07-12','20170930','2017/10/11','2017 12 11'])
  2.  
  3. pd.to_datetime(data)
  4. 0 2017-05-20
  5. 1 2017-07-12
  6. 2 2017-09-30
  7. 3 2017-10-11
  8. 4 2017-12-11
  9. dtype: datetime64[ns]
  • 提取指定日期的数据

如下tm_rng是以5小时时间间隔,生成了20个数据。我们只要2018-01-02的数据。对Series或Dataframe都可以使用日期字符串操作,选取指定时间范围的数据。

  1. import pandas as pd
  2. import numpy as np
  3.  
  4. tm_rng = pd.date_range('2017-12-31 12:00:00',periods=20,freq='5H')
  5. tm_series = pd.Series(np.random.randn(len(tm_rng)), index=tm_rng)
  6. print(type(tm_series))
  7.  
  8. print(tm_series)
  9. <class 'pandas.core.series.Series'>
  10. 2017-12-31 12:00:00 0.618465
  11. 2017-12-31 17:00:00 -0.963631
  12. 2017-12-31 22:00:00 -0.782348
  13. .....
  14. 2018-01-04 06:00:00 -0.681123
  15. 2018-01-04 11:00:00 -0.710626
  16. Freq: 5H, dtype: floa64
  17.  
  18. #我们只要tm_series中是2018-01-02的数据
  19. tm_series['2018-01-02']
  20. 2018-01-02 04:00:00 0.293941
  21. 2018-01-02 09:00:00 -1.437363
  22. 2018-01-02 14:00:00 -0.527275
  23. 2018-01-02 19:00:00 1.140872
  24. Freq: 5H, dtype: float64
  25.  
  26. #我们要2018年的数据,结果全保留
  27. tm_series['2018']
  28. 2018-01-01 03:00:00 -0.363019
  29. 2018-01-01 08:00:00 0.426922
  30. 2018-01-01 13:00:00 -1.118425
  31. 2018-01-01 18:00:00 0.956300
  32. .....
  33. 2018-01-03 20:00:00 -1.967839
  34. 2018-01-04 01:00:00 -0.654029
  35. 2018-01-04 06:00:00 -0.681123
  36. 2018-01-04 11:00:00 -0.710626
  37. Freq: 5H, dtype: float64
  38. dft = pd.DataFrame(np.random.randn(len(tm_rng)), index=tm_rng)
  39.  
  40. print(type(dft))
  41. print(dft)
  42. <class 'pandas.core.frame.DataFrame'>
  43.  
  44. 2017-12-31 12:00:00 0.213331
  45. 2017-12-31 17:00:00 1.920131
  46. 2017-12-31 22:00:00 -1.608645
  47. 2018-01-01 03:00:00 -0.226439
  48. 2018-01-01 08:00:00 -0.558741
  49. .....
  50.  
  51. 2018-01-03 20:00:00 0.866822
  52. 2018-01-04 01:00:00 -0.361902
  53. 2018-01-04 06:00:00 0.902717
  54. 2018-01-04 11:00:00 -0.431569
  55.  
  56. #对dataframe中的时间操作,只要2018-01-04日的数据
  57. print(type(dft['2018-01-04']))
  58. print(dft['2018-01-04'])
  59. <class 'pandas.core.frame.DataFrame'>
  60.  
  61. 2018-01-04 01:00:00 -0.361902
  62. 2018-01-04 06:00:00 0.902717
  63. 2018-01-04 11:00:00 -0.431569

Python中处理日期时间库的使用方法的更多相关文章

  1. Python中处理日期时间库的使用方法(转载)

    <本文来自公众号“大邓带你玩python”,转载> 用百分之20时间,学会解决百分之80的问题. 常用的库有time.datetime.其中datetime库是对time库的封装,所以使用 ...

  2. Python中使用模块和库编程

    """ python中使用模块和库编程 导入模块 import modulename [as alias] from modulename import fun1,fun ...

  3. Python中导入第三方声源库Acoular的逻辑解释以及Acoular的下载

    [声明]欢迎转载,但请保留文章原始出处→_→ 秦学苦练:http://www.cnblogs.com/Qinstudy/ 文章来源:http://www.cnblogs.com/Qinstudy/p/ ...

  4. Java8新特性探索之新日期时间库

    一.为什么引入新的日期时间库 Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的. 关 ...

  5. Android中关于日期时间与时区的使用总结

    在开发Android的过程中,出现过几次由于日期时间导致的问题,而且主要是由于时区的原因导致,所以一直想总结一下,形成一个良好的开发规范.   一.Unix时间戳   Unix时间戳(Unix tim ...

  6. 在mysql数据库中关于日期时间字段的处理

    在mysql数据库中关于日期时间字段的处理 在开发中,日期时间字段一般有如下几种设计 假设要获取2013-08-15日到2013-08-16日之间的记录 1. 直接使用日期时间类字段 相关sql语句如 ...

  7. js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js

    日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https:/ ...

  8. 使用ctypes在Python中调用C++动态库

    使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...

  9. python中常用的时间操作

    python中常用的时间模块有time和datetime,以下是这两个模块中常用的方法: #先引入模块 import timefrom datetime import datetiem, timezo ...

随机推荐

  1. Pycharm的界面修改与基本设置

    Pycharm的一些基本设置 设置字体大小与字体样式 首先我们打开Pycharm,点击左上角File,找到sitting 点击后就能进入设置界面 xdm,我将介绍两种更改字体的设置 方法一 设置界面找 ...

  2. SpringCloud创建Config Client配置读取

    1.说明 本文详细介绍配置中心客户端使用方法, 即Config Client到Config Server读取配置, 这里以创建Config Client服务为例, 基于已经创建好的Config Ser ...

  3. 数据库SQL语言类型(DQL.DML.DDL.DCL)

    1.SQL语言 SQL(Structure Query Language)语言是数据库的核心语言. SQL是一个标准的数据库语言, 是面向集合的描述性非过程化语言. 它功能强,效率高,简单易学易维护. ...

  4. STM32新建模板之库文件

    一.新建项目文件夹 在桌面创建项目文件夹,用于存放工程,命名为"stm32f10x_project" 在项目文件夹中创建3个文件夹,分别命名为:CMSIS.OUTPUT.STM32 ...

  5. web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素

    在web自动化,经常会遇到页面显示内容太多的时候,页面就会出现滚动条,一般有两种方式进行下拉,一种是直接下拉到底部/顶部/中部,或者直接给定元素,直接下拉到指定元素的位置. 两种方式的共同点: 两种方 ...

  6. 怎样安装python的 模块、 包、 库方法总结

    pip install 模块,这种输入命令回车后 1.pip install six 回车,安装成功后显示sucess 2.pip install lxml 回车,显示正在下载中的,可将这个下载地址复 ...

  7. CentOS 7 如何清空文件内容

    https://www.cnblogs.com/zqifa/p/linux-vim-4.html 方法1.在非编辑状态下使用快捷键gg跳至首行头部,再使用dG即可清空,或 输入"%d&quo ...

  8. ShardingJDBC

    ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下: sharding ...

  9. 怎样用命令行导入注册表 .reg 文件

    https://stackoverflow.com/questions/49676660/how-to-run-the-reg-file-using-powershell Get-Command re ...

  10. Zabbix忘记用户名和密码的解决方法

    问题描述: 最近刚搭建了zabbix服务器,然后新增加了一个用户,并且把默认的Admin禁用了.然后这个监控页面一直没关,保持了10多天,今天不小心把浏览器关闭了,重新打开后,突然忘记了用户名,这下麻 ...