【python测试开发栈】帮你总结一下python时间模块的高频使用python中与时间处理相关的模块主要有3个:time、datetime、calendar。本文主要帮助大家整理这三个模块比较常用的方法。熟悉GMT格林威治标准时间的三个概念。17世纪,格林威治皇家天文台为海上霸权的扩张计划进行了天文观测。观景台入口处的墙上有一个24小时制的时钟,显示的是现在的时间。在全球范围内,这里设置的时间是世界时间的参考点,世界各地都以格林威治标准时间为标准设置时间。但由于地球在椭圆轨道上的运动速度不均匀,GMT时间会出现误差,故不再作为标准时间使用。UTC坐标时间,也称:UniversalStandardTime,其计算方法更为准确。如果本地时间比UTC快,比如中国、蒙古、新加坡、马来西亚、菲律宾、西澳的时间比UTC快8小时,就写成UTC+8,俗称东8区。反之,如果本地时间比UTC时间慢,比如夏威夷时间比UTC时间慢10个小时,就会写成UTC-10,俗称西十区。DST(DaylightSavingTime)夏令时,夏季黎明较早,将时间向前调整一小时,以达到提早使用日光的目的,从而减少照明和用电开支。中国也实行过夏令时,但由于不便,于1992年暂停了夏令时,但全球仍有数十个国家在使用夏令时。time整理了time的方法,发现time模块整体围绕三种状态运行,如下图所示:三种状态对应的数据格式如下:timestamp的格式为:1578373137.54444时间祖先的格式是:time.struct_time(tm_year=2020,tm_mon=1,tm_mday=7,tm_hour=4,tm_min=58,tm_sec=57,tm_wday=1,tm_yday=7,tm_isdst=0),它实际上是时间数据格式描述。格式时间:2020-01-0712:58:57这个是按照我们传入的格式进行转换的。时间戳转时间祖先常用方法#获取时间戳time_stamp=time.time()print(time_stamp)#时间戳转时间祖先,从1970年1月1日0:00开始计算print(time.gmtime(time_stamp))#转换时间元组的时间戳,本地时间。如果在中国,则从1970年1月1日8点开始计算。local_time_tuple=time.localtime(time_stamp)print(local_time_tuple)这里注意:时间。gmtime()是根据UTC时间计算的,而time.localtime()是根据本地时间计算的。比如在中国,是从UTC+8小时开始计算的。这是这两种方法的主要区别。将时间元组转化为时间戳#将时间元组转化为时间戳time.mktime(local_time_tuple)将时间元组转化为格式化时间#格式化时间元组,local_time_str=time.strftime("%Y-%m-%d%H:%M:%S",local_time_tuple)#可以将时间元组转换成简单的格式字符串time.asctime(local_time_tuple)帮你整理出比较常用的格式。当然,这个不需要死记硬背。使用时可以查阅文档,但常用的格式还是需要掌握:格式含义注释%Y十进制数表示带世纪的年份%y十进制数[00,99]表示不带世纪的年份%m十进制数[01,12]%d十进制数表示的月份[01,31]%H十进制数表示的月份的日期[00,23]%I十进制数表示的小时[01,12]小时表示by%I十进制数[01,12](12小时制)%M十进制数[00,59]表示分钟%S十进制数[00,61]表示秒%W十进制数[00,53]表示一年中的星期数(星期一是星期几的第一天)作为。新年第一个星期一之前的所有日子都被认为是第0周。%U十进制数[00,53]一年中的星期数(星期日作为一周的第一天)作为。新年第一个星期日之前的所有日子都被认为是星期几0%w十进制数[0(Sunday),6]%p本地化的AM或PM%Z时区名称(如果没有时区,不包含字符)将时间格式转换为时间祖先#将时间格式转换为时间祖先time.strptime(local_time_str,"%Y-%m-%d%H:%M:%S")cputimetime.perf_counter()一个高精度的时间定时器,可以用来测量短期值,比如:方法执行时间。time.process_time()返回当前进程的系统和用户CPU时间之和的值(以小数秒为单位)。time.sleep()将调用线程的执行暂停给定的秒数。需要说明的是,该参数可以是浮点型,即时间可以精确到毫秒级。与时间模块相比,日期时间模块更注重时间和日期的操作。其中主要有六个类:date:用于处理日期,属性为:年、月、日。time:用于时间处理,属性有:时、分、秒、毫秒。datetime:包含日期和时间信息,所以这里主要介绍datetime对应的方法和操作。timedelta:主要用于对日期进行操作,可以产生一个时间偏移量。tzinfo:用来描述市区的抽象基类,我们一般用不到。时区:实施了tzinfo。常用方法:获取今天的时间)print(test_dt.year)#从时间戳加载时间test_dt_stamp=datetime.datetime.fromtimestamp(time.time())print(test_dt_stamp)#从公历序号加载时间,其中公元1年1月1日序号为1,#每增加一天,对应的值就加1,例如公元1月2日的序号为2。test_dt_dinal=datetime.datetime.fromordinal(1)print(test_dt_dinal)需要注意的是:weekday()方法返回当前星期几。默认情况下,星期一是第0天,星期日是第6天。fromordinal()方法使用Gregorian方法。计算时间时,不要忘记考虑闰年。时间的对比更容易理解。datetime中的对象可以直接比较,但大多数情况下,例如:#从两个时间戳中获取datetime时间,从而比较它们的大小test_stmap1=datetime.datetime.fromtimestamp(time.time()-4000000)test_stmap2=datetime.datetime.fromtimestamp(time.time())iftest_stmap2>test_stmap1:print("test_stmap2isbigger")时间的计算主要用在我们前面提到的类中:timedelta,可以表示一个时间差,比如:days、小时,甚至数周。然后我们可以找到一个时间基准来进行时间计算。例如,下面的例子计算昨天、今天和明天的时间:#计算昨天、今天和明天的时间test_today=datetime.datetime.today()print("today:",test_today)one_day=datetime.timedelta(days=1)yesterday=test_today-one_daytomorrow=test_today+one_dayprint("yesterday:",yesterday)print("tomorrow:",tomorrow)除了第一次,timedelta还支持对浮点数的操作:#浮点运算one_day=datetime.timedelta(days=1,hours=1)one_point_five_day=one_day*1.5print(one_point_five_day)这里要注意:timedelta可以有多个参数,比如datetime.timedelta(days=1,hours=1,秒=20)。然后乘以1.5,每个参数都会乘以1.5。比如上面例子的运行结果是:1天,13:30:00。Calendarcalendar类主要用于操作日历。这里小编为大家整理了它比较常用的方法。掌握这些方法,就足以让你在工作中运用了。打印日历的常用方法#打印一年的日历calen=calendar.calendar(2020)print(calen)#打印一个月的日历calen=calendar.month(2020,1)print(calen)#打印结果如下:January2020MoTuWeThFrSaSu12345678910111213141516171819202122232425262728293031是不是很酷,你可以打印一个日历代码行。时间和月份#获取指定年月日的星期几。calendar.weekday(2020,1,7)#根据指定日期获取时间信息,返回两个值。第一个值表示1号是星期几,第二个值表示这个月有多少天。calendar.monthrange(2019,1)闰年计算#检测某年是否为闰年calendar.isleap(2019)#检测指定年份内的闰年数calendar.leapdays(2008,2020)总结时间处理python的模块,可以帮助你方便的处理时间,文章中列出了比较常用的方法。当然,如果你有兴趣,可以去官方文档看看其他的方法(前段时间python已经提供了中文文档)。关注【公众号:软件测试布道师】,回复【python】,即可获得【python自动化与编程实践资料】
