“日期时间数据”作为三大基础数据类型之一,在数据分析中会经常遇到。

本文总结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基础 | 日期时间操作的更多相关文章

  1. paip.日期时间操作以及时间戳uapi php java python 总结

    paip.日期时间操作以及时间戳uapi php java python 总结 ///uapi Date 函数 | Day 函数 | Hour 函数 | Minute 函数 | Month 函数 | ...

  2. Java日期时间操作基础——包含JDK1.8时间操作新特性

    JDK1.7日期时间操作 示例小结 public class DateTest { public static final String FORMAT_DATE = "yyyy-MM-dd& ...

  3. Firebird日期时间操作

    最近在使用Firebird数据做 一项目,使用FireBird边用边学.(以下转贴) 查询2007年度以后的,12月份以上的数据记录,datetime为timestamp字段 select * fro ...

  4. Python学习---日期时间

    在Python里面日期时间的功能主要由几个模块提供:time,calendar,datetime,date等 time主要用到的功能函数: #!/usr/bin/python3 # coding:ut ...

  5. Python实用日期时间处理方法汇总

    这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...

  6. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  7. 程序员常用6 个 Python 的日期时间库

    内建的 datetime 模块 在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象. 假设我们从 API 接受到一个日期字符串, ...

  8. MySQL tips (日期时间操作/concat 等)

    1.  Query结尾要加一个分号: 2.  数据库和表 SHOW DATABASES;    USE YOUR_DB; SHOW TABLES; SHOW COLUMNS FROM study或者D ...

  9. python 之日期时间处理

    ##python时间操作一般使用time.datetime两个模块 对于time模块,时间的表示模式有3种1.时间戳:time.time()2.字符串: time.strftime('%Y%m%d') ...

随机推荐

  1. 编译gcc报错make[3]: Leaving directory `/usr/local/src/gcc-7.4.0/build/gcc' make[2]: *** [all-stage1-gcc] Error 2 处理

    因业务需要安装7.4高版本gcc时报错: configure: error: in `/usr/local/src/gcc-7.4.0/build/gcc': configure: error: C+ ...

  2. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  3. 孙鑫VC视频教程观看记录

    01: 了解了SDK编程,消息队列,消息响应,消息循环,窗口函数等. 02: 可以冒号:父类构造函数和a(1) protected子类可以访问 覆盖:父类子类之间   重载:同一个类中 ::作用域标识 ...

  4. 转: zabbix3.2.1安装graphtrees插件

    转自 : http://blog.csdn.net/liang_baikai/article/details/53542317 graphtree介绍 由于zabbix的图像显示一块不太友好,图像没法 ...

  5. mongodb 4.0配置认证模块

    use admin db.createUser({user:"root",pwd:"xxx",roles:[{role:"root",db: ...

  6. 基于webhook方案的Git自动部署方案

    之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...

  7. Vue.observable()使用方法

    前言 随着组件的细化,就会遇到多组件状态共享的情况, Vuex当然可以解决这类问题,不过就像 Vuex官方文档所说的,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天我们介绍的是 vue.js ...

  8. C++扬帆远航——6(三色球)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:sanseqiu.cpp * 作者:常轩 * 完成日期:2016 ...

  9. webpack 手动创建项目

    前言: webpack作为当前算是比较流行的打包工具之一,通过设置入口文件开始会把入口文件所依赖的所有文件(js,css,image等)进行对应的打包处理,其实现当时真的是很独特.现在流行的脚手架工具 ...

  10. mysql数据库笔记0

    mysql数据库笔记0 一次性添加多行数据 例如: INSERT INTO students (class_id, name, gender, score) VALUES (1, '大宝', 'M', ...