Python时间处理完全手册

简介:

处理时间是工作中非常常见的操作,最基本的获取当前时间,格式化时间,计算两个时间差,时间戳转换等等.
Python内置两个非常常用的时间处理库 timedatetime,足以满足工作中的各种需求。
datetime 功能更加强大, time 库就较为简练一些。
两个库互补使用,所有问题迎刃而解。

官方文档Python2.7 datetime(https://docs.python.org/2/library/datetime.html?highlight=datetime#module-datetime) 和 time(https://docs.python.org/2/library/time.html?highlight=time#module-time)

注意:time 或者 datetime 库需要提前import

WIKI:

UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒。 在多数Unix系统上Unix时间可以通过date +%s指令来检查。

各地日期和时间表示法:yyyy = 年份,mm = 月份,dd = 日期,MMM = 月份三字母缩写,mmmm = 月份全名,hr = 小时,mi = 分钟,se = 秒钟 

国际标准ISO 8601:yyyy-mm-dd,hr:mi:se(24小时制) 

中国:yyyy年m月d日;hr时mi分se秒;hr:mi:se(12/24小时制) 

美国:mm/dd/yyyy;mm/dd/yy;mmmm dd, yyyy;hr:mi:se(12小时制) 

澳大利亚:dd/mm/yyyy;MMM dd, yyyy;hr:mi:se a.m./p.m.(12/24小时制)

时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。

一. 获取并格式化时间

使用time模块获取当前时间

print time.strftime('%Y-%m-%d %H:%M:%S')

# Out: '2016-12-01 16:10:27'

使用datetime模块获取当前日期和当前时间

# 获取当前日期

today = datetime.date.today()

print today.strftime('%Y-%m-%d')

# Out: '2016-12-01'  # 获取当前日期



now = datetime.datetime.now()

print now.strftime('%Y-%m-%d %H:%M:%S')

# Out: '2016-12-01 16:14:22' # 获取当前日期时间

二. 转换时间格式

例如我们拿到了一个时间字符串 161201 16:14:22 需要将其转换成其他格式。

# 获取当前日期

today = datetime.date.today()

print today.strftime('%Y-%m-%d')

# Out: '2016-12-01'  # 获取当前日期



now = datetime.datetime.now()

print now.strftime('%Y-%m-%d %H:%M:%S')

# Out: '2016-12-01 16:14:22' # 获取当前日期时间

三. 计算两个时间间隔

计算时间间隔使用datetime模块比较方便。
datetime.date为日期对象,最小精度为天。
datetime.datetime为日期时间对象,最小精度为妙(毫秒也可以)
实际使用中按需选择。

8481c8f592b7f349aa84a1de5c171db681516edf计算2016-12-1和1990-1-1中间天数和秒数
dt = datetime.date(2016,12,1) - datetime.date(1990,1,1)

dt.days # 间隔天数


# 将字符串转换为datetime.date对象


dt_a = datetime.datetime.strptime('2016-12-1', '%Y-%m-%d') # datetime.date 无 strptime 方法

dt_b = datetime.datetime.strptime('1990-1-1', '%Y-%m-%d') # 虽然格式化时间的时候%m为两位数月份

# 但是反格式化时一位月份也可工作

dt = dt_a - dt_b

dt.days # 为 间隔天数

dt.total_seconds() # 为 间隔秒数

8481c8f592b7f349aa84a1de5c171db681516edf计算两个时间戳间隔时间

timestamp_a, timestamp_b = 1480582517, 1480472517

dt = datetime.datetime.fromtimestamp(timestamp_a) -datetime.datetime.fromtimestamp(timestamp_b)

print dt.days, dt.total_seconds()


# Out: 1 110000.0

四. 获取前N天,或者后N天时间

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

now = datetime.datetime.now()

before_time = now - datetime.timedelta(days=1)

after_time = now + datetime.timedelta(days=1)

print before_time

# Out: 2016-11-30 17:03:40.420000

print after_time

# Out: 2016-12-02 17:03:40.420000

五. 时间戳相关计算

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
通过时间戳可以快速直接得到很多信息

ts = int(time.time()) # ts = 1480583196

print ts / 86400 % 7 + 3 # 获取时间戳对应的星期 0 周日 - 6 周六

# Out: 3 # 周四

# ===============

timestamp_a, timestamp_b = 1480582517, 1480472517

ts = timestamp_a - timestamp_b

print ts / 86400 # 获取两个时间戳相隔天数

# ===============

# 获取当天00:00:00的时间戳

ts = int(time.time())

print ts / 86400 * 86400

# Out: 1480550400

# ===============

# 获取当天23:59:59的时间戳

ts = int(time.time())

print ts / 86400 * 86400 + 86400 - 1

# Out: 1480636799

个人认为时间戳才是最有魅力的

六. 各种数据类型间转换

  1. str > datetime.datetime

    1. datetime.datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  2. str > 时间元组

    1. dt = datetime.datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

    2. dt.timetuple()


    3. # or


    4. struct_time = time.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  3. 时间戳 > datetime.datetime 或 datetime.date

    1. datetime.datetime.fromtimestamp(时间戳)


    2. # or


    3. datetime.date.fromtimestamp(时间戳)

  4. 时间戳 > 时间元组

    1. time.gmtime(时间戳)

  5. 时间元组 > 时间戳

    1. time.mktime(时间戳)

  6. 时间元组 > datetime.datetime 或 datetime.date

    1. datetime.datetime.fromtimestamp(time.mktime(时间元组))


    2. # or


    3. datetime.date.fromtimestamp(time.mktime(时间元组))

  7. 时间戳 > 时间元组

    1. time.gmtime(时间戳)


    2. # or


    3. dt = datetime.datetime.fromtimestamp(时间戳)

    4. dt.timetuple()

七、格式化与反格式化控制字符对照表

字符 含义 例子
%a 当地格式的星期缩写 Sun,Mon...Sat(en_US);So,Mo...Sa(de_DE)
%A 当地格式的星期全拼 Sunday,Monday...Saturday(en_US);Sonntag,Montag...Samstag(de_DE)
%w 星期的数字表示0表示周日,6表示周六 0,1...6
%d 日,当月第几天,两位数 01,02...31
%b 当地格式的月份缩写 Jan,Feb...Dec(en_US);Jan,Feb...Dez(de_DE)
%B 当地格式的月份全拼 January, February,...,December(en_US);Januar,Februar...Dezember(de_DE)
%m 月份的数字表示,两位数 01,02...12
%y 年份表示,不带世纪,两位数 00,01...99
%Y 年份表示 1970,1971...2016
%H 小时 0-23 00,01...23
%I 小时 01-12 01,02...12
%p 当地格式的上午下午表示 AM,PM(en_US);am,pm(de_DE)
%M 分钟,两位数 00,01...59
%S 秒,两位数 00,01...59
%f 微妙,六位数 000000,000001...999999
%z 时区偏移量,表示为+HHMM或-HHMM或空 (空),+0000,-0400,+0800
%Z 时区名字 (空),UTC, EST, CST
%j 日,当年第几天,三位数 001,002...366
%U 周,在年第几周,周日为一周的第一天,新年第一个星期日第0周,两位数 00,01...53
%W 周,在年第几周,周一为一周的第一天,新年第一个星期一第0周,两位数 00,01...53
%c 当地格式的时间日期表示 Tue Aug 16 21:30:00 1988 (en_US);Di 16 Aug 21:30:00 1988 (de_DE)
%x 当地格式的日期表示 08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE)
%X 当地格式的时间表示 21:30:00 (en_US);21:30:00 (de_DE)
%% %字符 %


原文发布时间为:2016-12-08

本文作者:gw1770df

本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号

相关文章
|
25天前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
27天前
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
28天前
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
1月前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
1月前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
1月前
|
机器学习/深度学习 算法 数据可视化
Python数据分析高手修炼手册:线性回归算法,让你的数据说话更有力
【8月更文挑战第1天】在数据驱动时代,掌握数据分析技能至关重要。线性回归是最基础且强大的工具之一,能从复杂数据中提炼简单有效的模型。本文探索Python中线性回归的应用并通过实战示例加深理解。线性回归建立变量间线性关系模型:Y = β0 + β1*X + ε。使用scikit-learn库进行实战:首先安装必要库,然后加载数据、训练模型并评估性能。示例展示了如何使用`LinearRegression`模型进行房价预测,包括数据可视化。掌握线性回归,让数据“说话”更有力。
28 2
|
2月前
|
API Python
Python高手修炼手册:精通文件系统操作,掌控I/O管理,提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 `os` 和 `os.path` 模块易出错, `pathlib` 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 `aiofiles`) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
25 1
|
2月前
|
数据采集 机器学习/深度学习 运维
Python大佬耗费13年,始成400页《Python工匠》手册
Python 能干的事情实在太多了,掰着指头数有点不够用。 Web 开发、数据分析、网络爬虫、自动化运维、后台开发、机器学习....... 如果你知道主攻哪个方向,只需重点去学习。不过,不论哪个方向,Python 编程的核心知识都是需要掌握的。 但是今天咱们要讨论的一件事儿,是对于一些入门了的盆友,写了不少代码,一到面试就卡bug,又或者在项目中运用Python,代码不怎么样,却自我感觉良好,结果到处出漏洞,一堆的烂摊子。 我相信,这样的朋友肯定不少,可是目前市面上能帮助大家解决这种问题的书籍又非常稀缺,今天我就给大家推荐一本能帮助你解决燃煤之急的书籍。
|
2月前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
【7月更文挑战第12天】Python进阶必学:DFS和BFS图遍历算法。理解图概念,用邻接表建无向图,实现DFS和BFS。DFS适用于查找路径,BFS解决最短路径。通过实例代码加深理解,提升编程技能。
24 4
爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
Python (发音:[ 'paiθ(ə) n; (US) 'paiθɔn ] n. 蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。 Python 语言的特点: