曲曲的秘密学术基地

纯化欲望、坚持严肃性

欢迎!我是曲泽慧(@zququ),目前在深圳(ICBI,BCBDI,SIAT)任职助理研究员。


病毒学、免疫学及结构生物学背景,可以在 RG 上找到我已发表的论文

本站自2019年7月已访问web counter

python 时间处理模块总结

整理自小甲鱼鱼C论坛

python中与时间处理总结

Python中,与时间有关的模块包括:time,datetime以及calender。

datetime模块

datetime支持的时间范围

object.MINYEAR = 1 object.MAXYEAR = 9999

timedelta类属性

timedelta.min timedelta(-999999999)
timedelta.max timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolution timedelta(miacroseconds=1)

注意:timedelta.max > -timedelta.min, -timedelta.max无意义

timedelta实例属性(只读)

属性 取值范围
timedelta.days -999999999 ~ 999999999
timedelta.seconds 0 ~ 86399
timedelta.microseconds 0 ~ 999999

datetime模块中定义的类

定义的类 说明 常用属性
datetime.date 表示日期的类 year, month, day
datetime.time 表示时间的类 hour, minute, second, microsecond, tzinfo
datetime.datetime 表示日期和时间的类 year, month, day, hour, minute, second, microsecond, tzinfo
datetime.timedelta 表示时间间隔的类 两个时间点date, time, datetime之间的长度
datetime.tzinfo 表示时区的基类 为time与datetime类提供调整的基准
datetime.timezone 表示UTC时区的固定偏移 是tzinfo基类的实现

timedelta对象详解

timedelta对象表示两个日期或时间之间的间隔

data.timedelta(days = 0, seconds = 0, microseconds = 0, milliseconds = 0, minutes = 0, hours = 0, weeks = 0)

默认参数可以是整数,浮点数,整数或复数,默认为0。内部存储单位只有days,seconds以及microseconds,其他单位需要进行换算

timedelta对象支持的操作

操作 结果
t1=t2+t3  
t1=t2-t3  
t1=t2*i 对象乘以一个整数
t1=t2*f 对象乘以一个浮点数,结果四舍五入到精度timedelta.resolution
f=t2/t3 t2和t3的商,返回一个float对象
t1=t2/f或t1=t2/i 对象除以一个整数或浮点数,结果四舍五入到精度
t1=t2//i或t1=t2//t3 对象地板除一个整数或浮点数,结果社区小鼠,返回一个整数
t1=t2%t3 t2和t3的余数,返回一个timedelta对象
q,r = divmod(t1, t2) 计算t1和t2的商和余数,q=t1//t2,r=t1%t2, q是一个整数,r是一个timedelta对象
+t1 返回一个timedelta对象,且值相同
-t1 等同于timedelta(-t1.days, -t1.seconds, -t1.microseconds),并且相当于t1*-1
abs(t) 当t.days >= 0时,等同于t;当t.days <= 0时,等同-t
str(t) 返回一个字符串,格式为:[D day[s], ][H]H:MM:SS[.UUUUUU]
repr(t) 返回一个字符串,格式为:datetime.timedelta(D[, S[, U]])

timedelta的实例方法

timedelta.total_seconds() 返回timedelta对象所包含的总秒数,相当于td/timedelta(seconds=1)

请注意,对于非常大的时间间隔(大于270年),这种方法将失去微妙(microsecond)精度。

date 对象

date对象表示一个日期,在一个理想化的日历里,日期由year, month, day。

datetime.date(year, month, day)

date参数的范围

参数必需为整数并且满足一下范围:

  1. MINYEAR <= year <= MAXYEAR (也就是 1 ~ 9999)
  2. 1 <= month <= 12
  3. 1 <= day <= 根据year 和 month来决定(例如闰年和非闰年的二月问题)

date类方法(classmethod):

classmethod 功能
date.today() 返回一个表示当前本地日期的date对象
date.fromtimestam(timestamp) 根据给定的timestamp返回date对象
date.fromordinal(ordinal) 将Gregorian日历时间转换为date对象

date类属性

类属性 说明
date.min date(MINYEAR, 1, 1)
date.max date(MAXYEAR, 12, 31)
date.resolution timedelta(days=1)

date实例属性(只读)

属性 取值范围
date.year MINYEAR~MAXYEAR(1~9999)
date.month 1~12
date.day 1~根据year和month具体确定

对象支持的操作

操作 结果
date2 = date1 + timedelta 日期+时间间隔,返回新的日期对象
date2 = date1 - timedelta  
timedelta = date1 - date2  
date1 < date2 比较两个日期前后

date实例方法:

实例方法 功能
date.replace(year, month, day) 生成一个新的日期对象,用参数指定的年月日代替原有属性
date.timetuple() 返回日期对应的time.struct_time对象(类似于time.localtime())
date.toordinal() 返回日期对应的Gregorian Calendar日期
date.weekday() 返回0~6表示星期几(星期一是0,以此类推)
date.isoweekday() 返回1~7表示星期几(星期一是1,以此类推)
date.isocalendar() 返回一个三元组格式(year, month, day)
date.isoformat() 返回一个ISO 8601格式的日期字符串,如”YYYY-MM-DD”的字符串
date.str() 对于date对象d来说,str(d)相当于d.isoformat()
date.ctime() 返回一个表示日期的字符串,同time.ctime(time.mktime(d/timetuple()))
date.strftime(format) 返回自定义格式化字符串表示日期
date.format(format) 跟date.strftime(format)一样,这使得调用str.format()时可以指定data对象的的字符串

代码示例:

from datetime import date
d = date.fromordinal(735678)  # 1.1.0001后735678天
>>> d
datetime.date(2015, 3, 21)
>>> t = d.timetuple()
>>> for i in t:
        print(i)

2015
3
21
0
0
0
5
80
-1

>>> ic = d.isocalendar()    #对比d.timetuple()方法的输出数据
>>> for i in ic:
        print(i)

2015
12
6

>>> d.isoformat()    # ISO 8601格式输出,“YYYY-MM-DD”
'2015-03-21'

>>> d.strftime("%d/%m/%y")    #自定义输出格式
'21/03/15'

>>> d.strftime("%A %d. %B %Y")    #%A大写的周
'Saturday 21. March 2015'

>>> 'The {1} is {0:%d}, the {2} is {0:%b}.'.format(d, "day", "month")
'The day is 21, the month is March.'

time 对象

time对象表示一天中的一个时间,可以通过tzinfo对象进行调整。

datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

time 参数范围

所有参数都是可选的,tzinfo可以是None或者tzinfo子类的实例对象;其余参数可以是整数,并在一下范围内:

  1. 0 <= hour < 24
  2. 0 <= minute < 60
  3. 0 <= second < 60
  4. 0 <= microsecond < 1000000

注:如果参数超出范围,将引发ValueError

time 类属性

类属性 说明
time.min time(0, 0, 0, 0)
time.max time(23, 59, 59, 999999)
time.resolution timedelta(microseconds=1)

time 属性(只读)

属性 取值范围
time.hour 0~23
time.minute 0~59
time.second 0~59
time.microsecond 0~999999
time.tzinfo 通过构造函数的tzinfo参数赋值

time 实例方法

实例方法 说明
time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) 生成一个新的日期对象,用参数指定,时间代替原有属性
time.isoformat() 返回一个ISO 8601 格式的日期字符串,如”HH:MM:SS.mmmmmm”的字符串
time.str() 对于time对象t来说,str(t)相当于t.isoformat()
time.strftime(format) 返回自定义格式化字符串表示时间
time.format(format) 同time.strftime(format),使得调用str.format()时可以指定time对象的字符串
time.utcoffset() 如果tzinfo属性是None,则返回None;否则返回self.tzinfo.utcoffset(self)
time.dst() 如果tzinfo属性是None,则返回None;否则返回self.tzinfo.tzname(self)

time 代码示例,

>>> fromt datetime import time, timedelta, tzinfo
>>> class GMT1(tzinfo):
        def utcoffset(self, dt):
            return timedelta(hours=1)
        def dst(self, dt):
            return timedelta(0)
        def tzname(self, dt):
            return "欧洲/布拉格"

>>> t = time(14, 10, 30, tzinfo=GMT1())
>>> t
datetime.time(14, 10, 30, tzinfo=<__main__.GMT1 object at 0x02D7FE90)
>>> gmt = GMT1()
>>> t.isoformat()
'14:10:30+01:00'
>>> t.dst()
datetime.timedelta(0)
>>> t.tzname()
'欧洲/布拉格'
>>> t.strftime("%H:%M:%S %Z")
'14:10:30 欧洲/布拉格'
>>> 'The {} is {:%H:%M}.'.format("time", t)
'The time is 14:10.'

datetime对象

datetime对象是date对象和time对象的结合体,并且包含他们所有的信息。

datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

datetime 参数范围

必须的参数为year, month, day; tzinfo 可以是None或者tzinfo子类的实例对象;其余的参数可以是整数,范围同上,不做赘述。

datetime 实例属性(只读)

datetime实例属性同上,不做赘述。

datetime对象支持的操作

同date对象支持的操作,不做赘述。

datetime 类方法(classmethod)

类方法 说明
datetime.today() 返回一个表示当前本地时间的datetime对象,同datetime.fromtimestamp(time.time())
datetime.now(tz=None) 返回一个表示当前本地时间的datetime对象;如果提供了参数tz,则获取tz参数所指时区的本地时间
datetime.utcnow() 返回一个当前UTC时间的datetime对象
datetime.fromtimestamp(timestamp, tz=None) 根据时间戳创建一个datetime对象,参数tz指定时区信息
datetime.utcfromtimestamp(timestamp) 根据时间戳创建一个UTC时间的datetime对象
datetime.fromordinal(ordinal) 返回对应Gregorian日历时间对应的datetime对象
datetime.combine(date, time) 根据参数date和time,创建一个datetime对象
datetime.strptime(date_string, format) 将格式化字符串转化为datetime对象

datetime 类属性

参考time和date,不做赘述

datetime 实例方法

实例方法 说明
datetime.date() 返回一个date对象datetime.time(), 返回一个time对象(tzinfo属性为None)
datetime.timetz() 返回一个time()对象(带有tzinfo属性)
datetime.replace([year[,month,[day[,hour[,minute[,second[,microsecond[,tzinfo]]]]]]]]) 生成一个新的日期对象,用参数指定日期和时间代替原有对象中的属性
datetime.astimezone(tz=None) 传入一个新的tzinfo属性,返回根据新时区调整好的datetime对象
datetime.utcoffset() 如果tzinfo为None,返回None;否则返回self.tzinfo.utcoffset(self)
datetime.dst() tzinfo为None,返回None;否则返回self.tzinfo.dst(self)
datetime.tzname() tzinfo为None,返回None;否则返回self.tzinfo.tzname(self)
datetime.timetuple() 返回日期对应的time.struct_time对象(类似于time模块的time.localtime())
datetime.utctimetuple() 返回UTC日期对应的time.struct_time对象
datetime.timestamp() 返回当前时间的时间戳(类似于time 模块的time.time())
date.weekday() 返回0~6表示星期几(星期一是0,以此类推))
datetime.isoweekday() 返回1~7表示星期几
datetime.isocalendar() 返回一个三元组格式(year, month, day)
datetime.isoformat(sep=’T’) 返回一个ISO 8601格式的日期字符串,如”YYYY-MM-DD”的字符串
datetime.str() 对于date对象来说,str(d)相当于d.isoformat()
datetime.ctime() 返回一个表示日期的字符串,相当于time模块的time.ctime(time.ctime(time.mktime(d.timetuple())))
datetime.strftime(format) 返回自定义格式化字符串表示日期
datetime.format(format) 与datetime.strftime(format)一样,这使得调用str.format()时可以指定data对象的字符串

格式化字符串: strftime() 和 strptime()

date, datetime 和time均支持strftime(format)方法,将指定日期或时间转化为自定义的格式化字符串。

datetime.strptime()类方法把格式化字符串转换为datetime对象。

格式化指令 含义
%a Mon, Tue, Wed…
%A Monday, Tuesday, Wednesday…
%w 一个星期中的第几天,0星期天,6星期六
%d 在一个月的第几天(01,02,…,31)
%b Jan, Feb…
%B January, February…
%m 月份(01, 02…)
%y 两个数字表示年份,2014 == 14
%Y 四个数字表示年份
%H 24小时(00, 01, …, 23)
%I 12小时(01, 02, …, 11)
%p AM或PM
%M 分钟(00, 01, …, 59)
%S
%f 微秒(000000, 000001, …, 999999)
%z 与UTC时间的间隔;如果本地时间,返回空字符串((empty), 0000,-0400, 1030)
%Z 时区名称;如果是本地时间,返回空字符串((empty), UTC, ET, CST)
%j 在一年中的第几天(001, 002, …, 366)
%U 在一年中的第几周,星期天作为第一天(00, 01, …, 53)
%W 在一年中的第几周,星期一作为第一天(00, 01, …, 53)
%c 用字符串表示日期和时间(Tue Aug 16 21:30:00 2014)
%x 用字符串表示日期(08/16/24)
%X 用字符串表示时间(21:30:00)
%% 表示百分号
Last One

汇编语言 9.9 9.10 实验8 根据位移进行转移的意义 编译器对转移位移超界的检测

9.9 根据位移进行转移的意义目前转移命令有一下几种: jmp short 标号 jmp near ptr 标号 jcxz 标号 loop 标号等几种汇编指令,它们对IP的修改是根据转移目的地之和转移起始地址之间的位移来进行的。在他们对应的机器码中不包含转移的目的地址,而包含的是到目的地之的位移。这种设计,方便了程序段在内存中的浮动装配。例如: 汇编指令 机器代码 mov cx, 6 B9 06 0...…

汇编语言More
Next One

python爬取ncbi检索信息的摸索(2) 找到隐藏背后的真实地址

在用python requests爬取ncbi数据库时候,会有个苦恼的地方,就是在通过ncbi数据库检索到蛋白后,地址栏给出的地址是隐藏的,即使你通过该出的该地址也无法打开对应的地址网页,也就无法正常爬取网页信息,如下图所示,可以看到即使我更改Summary为Fasta,并且将20 per page更改为200 per page,也无法看到完整的地址信息,下面我来介绍如何将完整的地址找到,首先inspect,并查看Network 选项,要注意重新刷新,比如说将20 per page更改为2...…

pythonMore