Python中时间的处理之——timedelta篇
#! /usr/bin/python
# coding=utf-8 from datetime import datetime,timedelta """
timedelta代表两个datetime之间的时间差
"""
now = datetime.now()
past = past = datetime(2010,11,12,13,14,15,16) timespan = now - past
#这会得到一个负数
past - now
attrs = [
("days","日"),( 'seconds',"秒"),( 'microseconds',"毫秒")
#('min',"最小"),( 'max',"最大"),
]
for k,v in attrs:
"timespan.%s = %s #%s" % (k,getattr(timespan, k),v) """
总共相差的秒数
"""
timespan.total_seconds() """
实例化一个timespan
请注意它的参数顺序
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
"""
timespan = timedelta(days=1)
now - timespan #返回的是datetime型
now + timespan timespan * 2 #还可以乘哦。代表二倍
timespan / 13 #增加一个月
from calendar import monthrange
now + timedelta(days=monthrange(start.year,start.month)[1])
- # -*- encoding=UTF-8 -*-
- import datetime
- def timebefore(d):
- chunks = (
- (60 * 60 * 24 * 365, u'年'),
- (60 * 60 * 24 * 30, u'月'),
- (60 * 60 * 24 * 7, u'周'),
- (60 * 60 * 24, u'天'),
- (60 * 60, u'小时'),
- (60, u'分钟'),
- )
- #如果不是datetime类型转换后与datetime比较
- if not isinstance(d, datetime.datetime):
- d = datetime.datetime(d.year,d.month,d.day)
- now = datetime.datetime.now()
- delta = now - d
- #忽略毫秒
- before = delta.days * 24 * 60 * 60 + delta.seconds #python2.7直接调用 delta.total_seconds()
- #刚刚过去的1分钟
- if before <= 60:
- return u'刚刚'
- for seconds,unit in chunks:
- count = before // seconds
- if count != 0:
- break
- return unicode(count)+unit+u"前"
实例2:
‘’‘当前的时间上加一天或一年减一天等操作’‘’
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- from datetime import datetime,timedelta
- now = datetime.now()
- yestoday = now - timedelta(days=1)
- tommorow = now + timedelta(days=1)
- next_year = now + timedelta(days = 365)
- #使用replace()代替日期加减
- from datetime import datetime
- now1 = datetime.now()
- now1 # datetime.datetime(2017, 2, 10, 22, 29, 48, 288500)
- # 增加一天或减少一天
- now2 = now1.replace(day=9)
- now2 # datetime.datetime(2017, 2, 9, 22, 29, 48, 288500)
- # timestrap() 函数是把日期转化为时间戳,时间戳就是秒数
- time_span = now1.timestrap() - now2.timestrap()/(24*3600)
- time_span # 1
日期常用问题
在使用Django时,默认是开启对多时区的支持的,在获取时间的时候会是如下形式:
datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)
我们可以利用django.utils.timezone中提供的localtime方法来将该时间转换为本地时间:
|
1
2
3
4
|
>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)>>> localtime(dt)datetime.datetime(2014, 4, 18, 23, 37, 7, tzinfo=<LocalTimezone>) |
有时候,我们需要将该时间与当前时间做比较,例如计算差值,你可能会想到直接这么做:
|
1
2
3
|
>>> import datetime>>> now = datetime.datetime.now()>>> now - dt |
不过这是不对的,并告知如下错误:
|
1
2
3
|
Traceback (most recent call last): File "<console>", line 1, in <module>TypeError: can't subtract offset-naive and offset-aware datetimes |
问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:
|
1
2
3
4
5
|
>>> dt = dt.replace(tzinfo=None)>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7)>>> now - dtdatetime.timedelta(0, 34108, 443000) |
备注:1:timezone 获取的日期增加和修改(比如加一天减一天)
from django.utiles import timezone
from datetime
t1 = timezone.now()
# torrow
t1+datetime.timedelta(days=1,hours=1)
2:python得到两个时间段的每一天的列表
begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")
while begin_date <= end_date:
date_str = begin_date.strftime("%m-%d")
date_list.append(date_str)
begin_date += datetime.timedelta(days=1)
print date_list # 方法2(安装boto3 库 pip install boto3):
from datetime import datetime
from dateutil.rrule import rrule, DAILY a = datetime(2009, 5, 30)
b = datetime(2009, 6, 9) for dt in rrule(DAILY, dtstart=a, until=b):
print dt.strftime("%Y-%m-%d")
# 在原来日期上增加一年
from dateutil.relativedelta import relativedelta
from django.utils import timezone
t1 = timezone.now()
neww_year = t1 + relativedelta(years=1)
Python中时间的处理之——timedelta篇的更多相关文章
- python中时间的基本使用
格式化日期 我们可以使用 time 模块的 strftime 方法来格式化日期,: time.strftime(format[, t]) #!/usr/bin/python # -*- coding: ...
- python中时间日期格式化符号
python中时间日期格式化符号: import time print(time.strftime('%Y%H%M%S', time.localtime())) 运行结果: 2016092308 %y ...
- python中时间格式
问题:通过MySQLdb查询datetime字段,然后通过浏览器显示出来,得到的格式是: 'Thu, 19 Feb 2009 16:00:07 GMT' (http呈现出来的格式) ...
- python中时间的转换和使用datetime
模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...
- 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)
我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当你本身不是程序员,但多少跟表格或数据打点交道时,pan ...
- python中时间处理标准库DateTime加强版库:pendulum
DateTime 的时区问题 Python的datetime可以处理2种类型的时间,分别为offset-naive和offset-aware.前者是指没有包含时区信息的时间,后者是指包含时区信息的时间 ...
- python中时间和时区
1.时区 http://blog.csdn.net/cz157733055/article/details/38319195 2.时间 datetime.timedelta代表两个时间之间的的时间差 ...
- python中时间日期格式化符号:
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数( ...
- python中时间操作总结
一.time 二.datetime 1.获取当前系统时间 datenow = datetime.datetime.now() 2.将datetime格式的时间转换成str datenow = date ...
随机推荐
- 打开了chrome审查元素 发现报错 Uncaught SyntaxError: Unexpected token )
这个错误并不影响业务处理,但是看到有报错,心里总是不爽. 经过几番查找,发现了原因. <a href="javascript:void()" oncick="onS ...
- Xml游标
Mainactivity package com.exmple.xmlstream; import java.util.ArrayList; import java.util.List; import ...
- android 项目学习随笔一(闪屏 )
1.取标题栏且全屏 <activity android:name="com.ecollab.zhsh66.SplashActivity" android:label=&quo ...
- win7 chm 打开失败记录
近期学习rails,制作的html帮助文件想生成chm文件,用了几个网上的html制作chm软件,生成的chm无法打开. 网上大部分解决方法是修改文件属性,Unlock之后可解决. 以前遇到过打不开, ...
- python核心编程学习记录之Python对象
比较符号如<,>,=比较的是对象的值 如果要比较对象本身要用is,is not repr()的功能与''所做的事情是一样的 Python不支持的类型有char,byte,指针,short, ...
- 去除冗余 – 精简您的CSS样式代码
讲讲常见的一些没有必要使用CSS代码情况,而这些不起作用可以去掉的CSS代码可能是我们经常忽视的.越是对CSS理解不够,越容易出现这些问题. 二.一些常见不必要CSS样式 1.与默认CSS样式一致 我 ...
- seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码
seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...
- history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量
对于Terminalor们,history命令并不陌生,什么!n, !!更是很常用的,而且您在命令行敲的cmds是默认保存在/home/$USER/.bash_history(linux) /User ...
- SELECT INTO和INSERT INTO SELECT
--自动创建了target_table表,并复制source_table表的数据到target_table select name,age into target_table from source_ ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...