Python基础 | 日期时间操作
“日期时间数据”作为三大基础数据类型之一,在数据分析中会经常遇到。
本文总结Python中常见的日期时间操作。
日期时间操作会涉及到的工具包:

import datetime
import calendar
import time
import pandas as pd
获取时间
# 当前日期
today = datetime.date.today()
# 当前日期时间
now = datetime.datetime.now()
now_2 = datetime.datetime.today()
print(today)
print(now)
print(now_2)
输出:
2019-12-30
2019-12-30 11:50:14.037643
2019-12-30 11:50:14.037676
时间映射
# 日期
# 获取对应的,年,月,日
print(today.year,today.month,today.day)
输出:
2019 12 30
# 时间对应的:时、分、秒
print(now.hour,now.minute,now.second)
输出:
11 50 14
# 获取对应的周信息
# 返回:年份,第几周,星期几
today.isocalendar()
输出:
(2020, 1, 1)
# 直接获取星期几
today.isoweekday()
输出:
1
# 给定月份,返回当月第一天的星期以及最后一天
calendar.monthrange(2019,9)
输出:
(6, 30)
# 本周第一天
today = datetime.date.today()
today - datetime.timedelta(days=today.weekday())
# weekday方法返回的是以星期日为起点的第几天
输出:
datetime.date(2019, 12, 30)
# 本周最后一天
today + datetime.timedelta(days=7-today.isoweekday())
# isoweekday方法是我们平常见到的星期几
输出:
datetime.date(2020, 1, 5)
格式转换
字符串转日期
# 字符串转日期
# 默认是转成日期时间格式
# 如果要获得日期,可以在日期时间格式的基础上加.date()
day_str = '2019-08-01'
day_time = datetime.datetime.strptime(day_str,'%Y-%m-%d')
print(day_time)
day_date = day_time.date()
print(day_date)
输出:
2019-08-01 00:00:00
2019-08-01
time_str = '2019-08-01 11:01:33'
time_time = datetime.datetime.strptime(time_str,'%Y-%m-%d %H:%M:%S')
print(time_time)
time_date = time_time.date()
print(time_date)
输出:
2019-08-01 11:01:33
2019-08-01
# 其他格式
date_str = '2019/8/3'
date_date = datetime.datetime.strptime(date_str,'%Y/%m/%d')
print(date_date)
date_str = '2019.8.3'
date_date = datetime.datetime.strptime(date_str,'%Y.%m.%d')
print(date_date)
输出:
2019-08-03 00:00:00
2019-08-03 00:00:00
日期转字符串
str(today)
输出:
'2019-12-30'
str(now)
输出:
'2019-12-30 11:50:14.037643'
datetime.datetime.strftime(now,'%Y-%m-%d')
输出:
'2019-12-30'
datetime.datetime.strftime(now,'%Y-%m-%d %H:%M:%S')
输出:
'2019-12-30 11:50:14'
unixtime
# 日期时间转unixtime
time.mktime(today.timetuple())
输出:
1577635200.0
time.mktime(now.timetuple())
输出:
1577677814.0
# unix time 转正常日期时间格式
# unix time 是指从1970.1.1起至今的总秒数
# 通常都是10位整数,如果是11位的话,那就是2286年以后的事情了
datetime.datetime.fromtimestamp(10000000000)
输出:
datetime.datetime(2286, 11, 21, 1, 46, 40)
# 如果你看到unix time超过10位数,就意味着后面的单位是毫秒或者更细的颗粒度
# 通常到秒级就可以,这个时候可以截取前10位整数来转化得到对应的日期时间
time_unix = 1577635200.0
datetime.datetime.fromtimestamp(time_unix)
输出:
datetime.datetime(2019, 12, 30, 0, 0)
# unix time 是指从1970.1.1起至今的总秒数
# 不过你会发现直接减出来的秒数和用time.mktime方法得到的会不一样
# 这是因为中国的时区需要偏移8个小时,也就是8*3600s
(today - datetime.date(1970, 1, 1)).total_seconds() - time.mktime(today.timetuple())
输出:
28800.0
28800/3600
输出:
8.0
时间计算
时间偏移
# 使用datetime.timedelta()方法
# timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
# 计算操作符可+可-,后面的时间单位也可正可负
now + datetime.timedelta(days=1)
输出:
datetime.datetime(2019, 12, 31, 10, 29, 51, 213734)
now + datetime.timedelta(days=-1)
输出:
datetime.datetime(2019, 12, 29, 10, 29, 51, 213734)
pandas 生成时间
date_range(start=None, end=None, periods=None, freq=None, tz=None)
- start : str or datetime-like, optional
Left bound for generating dates. - end : str or datetime-like, optional
Right bound for generating dates. - periods : integer, optional
Number of periods to generate. - freq : str or DateOffset, default 'D'
Frequency strings can have multiples, e.g. '5H'. See
:ref:here <timeseries.offset_aliases>for a list of
frequency aliases. - tz : str or tzinfo, optional
# 间隔的频率,可以是天 'D'
pd.date_range(start = '2020-1-1',freq='D',periods=3)
输出:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')
# 也可以是小时 H
pd.date_range(start = '2020-1-1',freq='H',periods=3)
输出:
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 01:00:00', '2020-01-01 02:00:00'], dtype='datetime64[ns]', freq='H')
# 可以间隔多天
pd.date_range(start = '2020-1-1',freq='2D',periods=3)
输出:
DatetimeIndex(['2020-01-01', '2020-01-03', '2020-01-05'], dtype='datetime64[ns]', freq='2D')
# 也可以间隔多个小时
pd.date_range(start = '2020-1-1',freq='6H',periods=3)
输出:
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 06:00:00', '2020-01-01 12:00:00'], dtype='datetime64[ns]', freq='6H')
# 还可以混合
pd.date_range(start = '2020-1-1',freq='2D6H',periods=3)
输出:
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-03 06:00:00', '2020-01-05 12:00:00'], dtype='datetime64[ns]', freq='54H')
pd.date_range(start = '2020-1-1',freq='Q',periods=3)
输出:
DatetimeIndex(['2020-03-31', '2020-06-30', '2020-09-30'], dtype='datetime64[ns]', freq='Q-DEC')
时间差
time_next = now + datetime.timedelta(weeks=3)
time_gap = time_next-now
# 时间差的天数,总秒数
print(time_gap.days,time_gap.total_seconds())
输出:
21 1814400.0
Python基础 | 日期时间操作的更多相关文章
- paip.日期时间操作以及时间戳uapi php java python 总结
paip.日期时间操作以及时间戳uapi php java python 总结 ///uapi Date 函数 | Day 函数 | Hour 函数 | Minute 函数 | Month 函数 | ...
- Java日期时间操作基础——包含JDK1.8时间操作新特性
JDK1.7日期时间操作 示例小结 public class DateTest { public static final String FORMAT_DATE = "yyyy-MM-dd& ...
- Firebird日期时间操作
最近在使用Firebird数据做 一项目,使用FireBird边用边学.(以下转贴) 查询2007年度以后的,12月份以上的数据记录,datetime为timestamp字段 select * fro ...
- Python学习---日期时间
在Python里面日期时间的功能主要由几个模块提供:time,calendar,datetime,date等 time主要用到的功能函数: #!/usr/bin/python3 # coding:ut ...
- Python实用日期时间处理方法汇总
这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- 程序员常用6 个 Python 的日期时间库
内建的 datetime 模块 在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象. 假设我们从 API 接受到一个日期字符串, ...
- MySQL tips (日期时间操作/concat 等)
1. Query结尾要加一个分号: 2. 数据库和表 SHOW DATABASES; USE YOUR_DB; SHOW TABLES; SHOW COLUMNS FROM study或者D ...
- python 之日期时间处理
##python时间操作一般使用time.datetime两个模块 对于time模块,时间的表示模式有3种1.时间戳:time.time()2.字符串: time.strftime('%Y%m%d') ...
随机推荐
- 850. Dijkstra求最短路 II
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...
- android activity 启动过程分析(source code 4.4)
说实话,android source code从2.3到4.4变化是蛮多的,尤其是media部分,虽然总的框架是没有多大变化,但是找起代码来看还是挺麻烦的.在android里面最受伤的是使用了java ...
- LeetCode--链表1-单链表
LeetCode--链表1-单链表 单链表模板 初始化 头部插入 尾部插入 删除节点 Index插入 Index返回对应的节点指针和val值 class MyLinkedList { private: ...
- JDBC大数据的采取
## JDBC的大类型数据的存取 ## # 基本概念: |-- 大文本类型数据和大二进制数据: 主要思想用于将大型的二进制数据(字节) 或是大型的文本数据(字符)从磁盘文件中读取 到数据库中,或是从数 ...
- OpenCV3入门(十二)角点检测
1.角点介绍 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域中,也称为特征点检测.在图像中角 ...
- 全差分运算放大器ADA4930的分析(2)
前面解释了在ADA4930组成的单端转差分电路的输入电阻RIN的大小,可知当RF=RG=1KΩ的时候,RIN=1.33KΩ. 图1单端转差分电路 如图1所示,假设信号源为2V VPP的信号,信号源的内 ...
- Vue2.0组件的继承与扩展
如果有需要源代码,请猛戳源代码 希望文章给大家些许帮助和启发,麻烦大家在GitHub上面点个赞!!!十分感谢 前言 本文将介绍vue2.0中的组件的继承与扩展,主要分享slot.mixins/exte ...
- 玩转 React(五)- 组件的内部状态和生命周期
文章标题总算是可以正常一点了-- 通过之前的文章我们已经知道:在 React 体系中所谓的 "在 JavaScript 中编写 HTML 代码" 指的是 React 扩展了 Jav ...
- React Native 在 Airbnb(译文)
在Android,iOS,Web和跨平台框架的横向对比中,React Native本身是一个相对较新且快速开发移动的平台.两年后,我们可以肯定地说React Native在很多方面都是革命性的.这是移 ...
- node中fs模块 - fs.open() fs.read() fs.write() fs.close()
var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...