python中datetime函数的用法,python中datetime应用举例
python怎么调用时间
datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块。下面总结下本人想到的几个常用功能。
1、当前时间:
print datetime.datetime.now()2015-07-17 16:39:15.712000 print type(datetime.datetime.now())
type 'datetime.datetime'
返回的datetime时间格式。
2、当前日期
print datetime.datetime.now().date()2015-07-17 print type(datetime.datetime.now().date())
type 'datetime.date'
3、当前时间tuple
datetime.datetime.now().timetuple()time.struct_time(tm_year=2015, tm_mon=7, tm_mday=17, tm_hour=16, tm_min=51, tm_sec=26, tm_wday=4, tm_yday=198, tm_isdst=-1)
datetime.datetime.now().timetuple().tm_mday17
4、时间移动(几天、几小时前后...)
使用datetime.timedelta这个方法来前后移动时间,可以用的参数有weeks,days,hours,minutes,seconds,microseconds。
print datetime.datetime.now() + datetime.timedelta(days=1)2015-07-18 16:49:48.574000 print datetime.datetime.now() + datetime.timedelta(hours=1)2015-07-17 17:49:57.122000 print datetime.datetime.now() + datetime.timedelta(minutes=-30)2015-07-17 16:20:08.619000
上个月最后一天
print datetime.date(day=1,month=datetime.date.today().month,year=datetime.date.today().year) - datetime.timedelta(days=1)2015-06-30
5、获取两个时间的时间差
(datetime.datetime.now() - datetime.datetime.utcnow()).total_seconds()
28800.0
6、时间转化
datetime转str格式:
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")'2015-07-17 16:58:46'
str格式转datetime格式:
datetime.datetime.strptime("2015-07-17 16:58:46","%Y-%m-%d %H:%M:%S")
datetime.datetime(2015, 7, 17, 16, 58, 46)
print datetime.datetime.strptime("2015-07-17 16:58:46","%Y-%m-%d %H:%M:%S")2015-07-17 16:58:46 print type(datetime.datetime.strptime("2015-07-17 16:58:46","%Y-%m-%d %H:%M:%S"))
type 'datetime.datetime'
datetime转timestamp:
import time now=datetime.datetime.now() time.mktime(now.timetuple())1437123812.0
timestamp转datetime:
datetime.datetime.fromtimestamp(1437123812.0)datetime.datetime(2015, 7, 17, 17, 3, 32)
print datetime.datetime.fromtimestamp(1437123812.0)
2015-07-17 17:03:32
python中timedelta方法怎么用
#! /usr/bin/python# coding=utf-8from 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])
实例1:
'''时间d距离now()的长度,比如:1分钟前,1小时前,1月前,1年前'''
Python代码 ?
#?-*-?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:
‘’‘当前的时间上加一天或一年减一天等操作’‘’
Python代码1??
#!/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)
Python代码2??
#使用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??????
日期常用问题
1: Datetime中offset-naive与offset-aware时间的计算
在使用Django时,默认是开启对多时区的支持的,在获取时间的时候会是如下形式:
datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=UTC)
我们可以利用django.utils.timezone中提供的localtime方法来将该时间转换为本地时间:
1234? ??dtdatetime.datetime(2014,?4,?18,?15,?37,?7,?tzinfo=UTC)?localtime(dt)datetime.datetime(2014,?4,?18,?23,?37,?7,?tzinfo=LocalTimezone)? ?
有时候,我们需要将该时间与当前时间做比较,例如计算差值,你可能会想到直接这么做:
123? ??import?datetime?now?=?datetime.datetime.now()?now?-?dt? ?
不过这是不对的,并告知如下错误:
123? ?Traceback?(most?recent?call?last):??File?"console",?line?1,?in?moduleTypeError:?can't?subtract?offset-naive?and?offset-aware?datetimes? ?
问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:
12345? ??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得到两个时间段的每一天的列表
date_list =?[]
? ?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中datetime怎么用
'''''
日期相关的操作
'''
from
datetime
import
datetime
from
datetime
import
timedelta
DATE_FMT
=
'%Y-%m-%d'
DATETIME_FMT
=
'%Y-%m-%d
%H:%M:%S'
DATE_US_FMT
=
'%d/%m/%Y'
'''''
格式化常用的几个参数
Y
:
1999
y
:99
m
:
mouth
02
12
M
:
minute
00-59
S
:
second
d
:
day
H
:
hour
'''
def
dateToStr(date):
'''''把datetime类型的时间格式化自己想要的格式'''
return
datetime.strftime(date,
DATETIME_FMT)
def
strToDate(strdate):
'''''把str变成日期用来做一些操作'''
return
datetime.strptime(strdate,
DATETIME_FMT)
def
timeElement():
'''''获取一个时间对象的各个元素'''
now
=
datetime.today()
'year:
%s
month:
%s
day:
%s'
%(now.year,
now.month,
now.day)
'hour:
%s
minute:
%s
second:
%s'
%(now.hour,
now.minute,
now.second)
'weekday:
%s
'
%(now.weekday()+1)
#一周是从0开始的
def
timeAdd():
'''''
时间的加减,前一天后一天等操作
datetime.timedelta([days[,
seconds[,
microseconds[,
milliseconds[,
minutes[,
hours[,
weeks]]]]]]])
参数可以是正数也可以是负数
得到的对象可以加也可以减
乘以数字和求绝对值
'''
atime
=
timedelta(days=-1)
now
=
datetime.strptime('2001-01-30
11:01:02',
DATETIME_FMT)
now
+
atime
now
-
abs(atime)
now
-
abs(atime)*31
import
calendar
def
lastFirday():
today
=
datetime.today()
targetDay
=
calendar.FRIDAY
thisDay
=
today.weekday()
de
=
(thisDay
-
targetDay)
%
7
res
=
today
-
timedelta(days=de)
res
def
test():
dateToStr(datetime.today())
strToDate('2013-01-31
12:00:01')
#timeElement()
#timeAdd()
#lastFirday()
if
__name__=='__main__':
test()
python datetime处理时间
python时间处理方法datetime(),下面就举几个代码案例进行说明,代码如下:
?#?-*-?coding:?utf-8?-*-?
?#?运行环境:Python3.4
?#datetime类
?#datetime是date与time的结合体,包括date与time的所有信息。
?#它的构造函数如下:
?#datetime.?datetime?(year,?month,?day[?,?hour[?,?minute[?,?second[?,?microsecond[?,?tzinfo]?]?]?]?]?)
?#各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。
#?1.?datetime类定义的类属性与方法:
#datetime.min、datetime.max:datetime所能表示的最小值与最大值;
#print:?datetime.max:?9999-12-31?23:59:59.999999
#print:?datetime.min:?0001-01-01?00:00:00
from??datetime??import??*?
import?time
print???('datetime.max:'?+str(datetime.max?))?
print???('datetime.min:'?+str(datetime.min))??
#datetime.resolution:datetime最小单位;
#print:?datetime.resolution:?0:00:00.000001
print???('datetime.resolution:'?+?str(datetime.resolution?))
#datetime.today():返回一个表示当前本地时间的datetime对象;
#print:?today():?2012-09-12?19:37:50.721000
print???('today():'?+str(datetime.today()?))
#datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
#print:?now():?2012-09-12?19:37:50.738000
print???('now():'+str(?datetime.now()?))
#datetime.utcnow():返回一个当前utc时间的datetime对象;
#print:?2012-09-12?11:37:50.739000
print???('utcnow():'?+str(datetime.utcnow()?))?
#datetime.fromtimestamp(timestamp[,?tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
#print:?fromtimestamp(tmstmp):?2012-09-12?19:37:50.741000
print???('fromtimestamp(tmstmp):'?+str(datetime.fromtimestamp(time.time())?))
#datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
#print:?utcfromtimestamp(tmstmp):?2012-09-12?11:37:50.742000
print???('utcfromtimestamp(tmstmp):'?+str(datetime.utcfromtimestamp(time.time()))?)
#datetime.combine(date,?time):根据date和time,创建一个datetime对象;
#print:?datetime.combine(date,time):??2012-09-12?19:46:05
d?=?date(2012,9,12)
from??datetime??import??*?
t?=?time(19,46,5)
print?('datetime.combine(date,time):?'+str(datetime.combine(d,t)))
#datetime.strptime(date_string,?format):将格式字符串转换为datetime对象;
#print:?2007-03-04?21:08:12
print?(datetime.strptime("2007-03-04?21:08:12",?"%Y-%m-%d?%H:%M:%S"))
#2.?datetime类提供的实例方法与属性
dt?=?datetime.strptime("2012-09-12?21:08:12",?"%Y-%m-%d?%H:%M:%S")
#print:?2012?9?12?21?8?12?0?None
print?(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)
print(dt.tzinfo)
print?(dt.date())
print?(dt.time())
print?(dt.replace(year?=?2013))
print?(dt.timetuple())
print?(dt.utctimetuple())
print?(dt.toordinal())
print?(dt.weekday())
print?(dt.isocalendar())
#print?dt.isoformat([sep])
#datetime.?ctime?():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));
#3.?格式字符串
#?datetime.?strftime?(format)
#?%a?星期的简写。如?星期三为Web
#?%A?星期的全写。如?星期三为Wednesday
#?%b?月份的简写。如4月份为Apr
#?%B月份的全写。如4月份为April?
#?%c:??日期时间的字符串表示。(如:?04/07/10?10:43:39)
#?%d:??日在这个月中的天数(是这个月的第几天)
#?%f:??微秒(范围[0,999999])
#?%H:??小时(24小时制,[0,?23])
#?%I:??小时(12小时制,[0,?11])
#?%j:??日在年中的天数?[001,366](是当年的第几天)
#?%m:??月份([01,12])
#?%M:??分钟([00,59])
#?%p:??AM或者PM
#?%S:??秒(范围为[00,61],为什么不是[00,?59],参考python手册~_~)
#?%U:??周在当年的周数当年的第几周),星期天作为周的第一天
#?%w:??今天在这周的天数,范围为[0,?6],6表示星期天
#?%W:??周在当年的周数(是当年的第几周),星期一作为周的第一天
#?%x:??日期字符串(如:04/07/10)
#?%X:??时间字符串(如:10:43:39)
#?%y:??2个数字表示的年份
#?%Y:??4个数字表示的年份
#?%z:??与utc时间的间隔?(如果是本地时间,返回空字符串)
#?%Z:??时区名称(如果是本地时间,返回空字符串)
#?%%:??%%?=?%
dt?=?datetime.now()
#print:?(%Y-%m-%d?%H:%M:%S?%f):??2012-09-12?23:04:27?145000
print?('(%Y-%m-%d?%H:%M:%S?%f):?'+?str(dt.strftime('%Y-%m-%d?%H:%M:%S?%f')))
#print:?(%Y-%m-%d?%H:%M:%S?%p):??12-09-12?11:04:27?PM
print?('(%Y-%m-%d?%H:%M:%S?%p):?'+str(dt.strftime('%y-%m-%d?%I:%M:%S?%p')))
#print:?%a:?Wed?
print?('%%a:?%s?'?%?dt.strftime('%a'))
#print:?%A:?Wednesday
print?('%%A:?%s?'?%?dt.strftime('%A'))
#print:?%b:?Sep?
print?('%%b:?%s?'?%?dt.strftime('%b'))
#print:?%B:?September
print?('%%B:?%s?'?%?dt.strftime('%B'))
#print:?日期时间%c:?09/12/12?23:04:27
print?('日期时间%%c:?%s?'?%?dt.strftime('%c'))
#print:?日期%x:09/12/12
print?('日期%%x:%s?'?%?dt.strftime('%x'))
#print:?时间%X:23:04:27
print?('时间%%X:%s?'?%?dt.strftime('%X'))
#print:?今天是这周的第3天
print?('今天是这周的第%s天?'?%?dt.strftime('%w'))
#print:?今天是今年的第256天?
print?('今天是今年的第%s天?'?%?dt.strftime('%j'))
#print:?今周是今年的第37周
print?('今周是今年的第%s周?'?%?dt.strftime('%U'))
上面代码案例运行结果如下:
atetime.max:9999-12-31?23:59:59.999999
datetime.min:0001-01-01?00:00:00
datetime.resolution:0:00:00.000001
today():2014-05-04?15:58:18.141186
now():2014-05-04?15:58:18.193146
utcnow():2014-05-04?07:58:18.243958
fromtimestamp(tmstmp):2014-05-04?15:58:18.291558
utcfromtimestamp(tmstmp):2014-05-04?07:58:18.342550
datetime.combine(date,time):?2012-09-12?19:46:05
2007-03-04?21:08:12
2012
9
12
21
8
12
None
2012-09-12
21:08:12
2013-09-12?21:08:12
time.struct_time(tm_year=2012,?tm_mon=9,?tm_mday=12,?tm_hour=21,?tm_min=8,?tm_sec=12,?tm_wday=2,?tm_yday=256,?tm_isdst=-1)
time.struct_time(tm_year=2012,?tm_mon=9,?tm_mday=12,?tm_hour=21,?tm_min=8,?tm_sec=12,?tm_wday=2,?tm_yday=256,?tm_isdst=0)
734758
2
(2012,?37,?3)
(%Y-%m-%d?%H:%M:%S?%f):?2014-05-04?15:58:19?326295
(%Y-%m-%d?%H:%M:%S?%p):?14-05-04?03:58:19?PM
%a:?Sun?
%A:?Sunday?
%b:?May?
%B:?May?
日期时间%c:?Sun?May??4?15:58:19?2014?
日期%x:05/04/14?
时间%X:15:58:19?
今天是这周的第0天?
今天是今年的第124天?
今周是今年的第18周
python中datetime怎么设置时区
1、默认情况下,pandas中的时间序列是单纯(naive)的时区,其索引的tz字段为None。
2、可以用时区集生成日期范围。
3、从单纯到本地化的转换是通过tz_localize方法处理的。
4、一旦时间序列被本地化到某个特定时区,就可以用tz_convert将其转换到别的时区了。
5、对于上面这种时间序列(它跨越了美国东部时区的夏令时转变期),我们可以将其本地化到EST,再转换为UTC或柏林时间。