解决python 使用time.loacltime()获取当前时间不准问题

博主在编写Python爬虫时遇到一个问题,由于使用`time.strftime()`格式化时间时混淆了月份%m和分钟%M,导致获取的时间不准确。在经过一系列尝试和查阅资料后,发现错误在于分钟格式应为大写的%M,修正后时间正确显示。博主提醒编程时要注意细节,遇到问题要深入探究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决python 使用time.loacltime()获取当前时间不准问题

作为python小白的我,果然容易犯很多低级的错误或者说又不自觉想当然了,导致又花费了好长时间处理BUG。

我在我的爬虫代码开始时记录了程序开始时间,代码如下:

startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime())

相信大佬一眼就能看出我这段代码中存在的问题,但作为小白的我一开始对这个我对照着百度到的时间转化格式类推出来的代码自豪无比:

time.strftime("%Y-%m-%d", time.localtime())

运行程序没报错,而且最巧合的是运行当时出来的结果和电脑显示的一致,完美,ok,问题解决,运行爬虫没问题就放一旁没管了。

我的爬虫设置的运行频率是每10分钟运行一次(包含爬取一遍的时间),到晚上9点半结束,因为是小白就简单粗暴的通过计算白天开始时间到21:30用多少个10分钟,然后用for循环将程序运行这么多遍,当天晚上满心欢喜的打开程序发现都快10点了竟然还在运行最后一遍,因为我爬虫的性质这个时候再爬毫无意义,所以我就直接手动停止了,并且以为是四舍五入的原因,没有去追根寻底,实时表明程序任何不符合预期的现象发生都意味着自己的代码在某些地方有问题,需要我们去追根到底。

回到本文的问题所在,第二天程序偏差更大了,这次我无法忽视了,就将程序停了,将这段代码单独运行了一下,果然时间对不上,立马跑去问度娘,搜到说可能是时区问题,却都没有给出具体怎么加时区的方法,无奈只能搜寻其他回答,试过一下几种方法

startTime = time.strftime("%Y-%m-%d %H:%m", time.now()) #报错
startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime(0)) #报错
startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime(tm_isdst=0))#报错
startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime(sece)) #报错
startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime(time.time()))#没报错但时间还是对不上	

以上就是我根据百度到的进行的各种尝试,还是报错,就试着打开time的源码查看,翻到这块代码介绍才恍然大悟

    Commonly used format codes:
    
    %Y  Year with century as a decimal number.
    %m  Month as a decimal number [01,12].
    %d  Day of the month as a decimal number [01,31].
    %H  Hour (24-hour clock) as a decimal number [00,23].
    %M  Minute as a decimal number [00,59].
    %S  Second as a decimal number [00,61].
    %z  Time zone offset from UTC.
    %a  Locale's abbreviated weekday name.
    %A  Locale's full weekday name.
    %b  Locale's abbreviated month name.
    %B  Locale's full month name.
    %c  Locale's appropriate date and time representation.
    %I  Hour (12-hour clock) as a decimal number [01,12].
    %p  Locale's equivalent of either AM or PM.

在我使用"%Y-%m-%d %H:%m"格式化日期在表达分钟时用的是小写m,而在strftime()函数中m表示月份,大写的M才是表示分钟,所以导致时间不一致,将m改成M一运行程序:

startTime = time.strftime("%Y-%m-%d %H:%M", time.localtime())

瞬间热泪盈眶,总算对了。

  • 总结

编程的时候一定要细心细心再细心,不能想当然,遇到异常要追根溯源,才能及早发现问题并纠正。希望我犯的低级错误大家不要犯,若不小心出现和我一样的问题,也能快速定位到问题所在!

一次BUG一次成长,又学到新的知识了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值