Python中如何处理时间问题
1. 调试如下代码,总是报错
搜索了一顿,好像还是没明白出错原因
2. CODE
# coding=utf-8
# python2.7
from datetime import datetime
import re
t1= u"2018 年 01 月 1"
t2= u"2018 年 02 月 22"
t3= u"2018 年 3 月 37 日"
def str2digi(strin):
m = re.match(u"(\d+)年(\d+)月(\d+)日?", strin)
yearn = m.group(1)
monthn = m.group(2)
dayn = m.group(3)
if len(m.group(2)) == 1:
monthn = '0'+ monthn
if len(m.group(3)) == 1:
dayn = '0' + dayn
cc = yearn + monthn + dayn
print 'firstdata is ',cc
print [cc]
ee = str(cc)
print [ee]
time = datetime.strptime(ee, "%Y%m%d").date()
return time
print ‘time is [%s]’ % str2digi(t1)
print ‘time is [%s]’ % str2digi(t2)
print ‘time is [%s]’ % str2digi(t3)
3. 输出
firstdata is 20180101
[u'20180101']
['20180101']
time is [2018-01-01]
firstdata is 20180222
[u'20180222']
['20180222']
time is [2018-02-22]
firstdata is 20180337
[u'20180337']
['20180337']
Traceback (most recent call last):
File ".\t2.py", line 40, in <module>
print 'time is [%s]' % str2digi(t3)
File ".\t2.py", line 34, in str2digi
time = datetime.strptime(ee, "%Y%m%d").date()
File "C:\Python27\lib\_strptime.py", line 335, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: 7
Python中如何处理时间问题
说明:t1 t2 t3 里没有空格,没有空格,这个是 V2EX 显示问题
Python处理时间主要用datetime模块,这是标准库里的核心工具。datetime类用来处理日期和时间,date和time类处理单独的日期或时间,timedelta计算时间差。
比如,获取当前时间:
from datetime import datetime
now = datetime.now()
print(now) # 输出类似:2023-10-27 14:30:00.123456
解析字符串时间用strptime:
date_str = "2023-10-27 14:30"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M")
格式化输出用strftime:
formatted = now.strftime("%Y年%m月%d日 %H时%M分")
计算时间差:
from datetime import timedelta
future = now + timedelta(days=7, hours=3)
diff = future - now
print(diff.days) # 相差天数
处理时区可以用pytz库(第三方):
import pytz
tz_shanghai = pytz.timezone('Asia/Shanghai')
local_time = datetime.now(tz_shanghai)
时间戳转换:
timestamp = now.timestamp() # 转时间戳
from_timestamp = datetime.fromtimestamp(timestamp) # 转回来
简单说就是:日常用datetime,复杂时区加pytz。
3 月有 37 日?
哈哈,我就是试试,忘了这茬
我去,我真是晕了
话说回来,如果你真的确定你发帖的时候没有空格,可以 @ 一下 Livid,是不是 V2EX 自动给数字和中文之间加的空格,对 code block 也起作用了
如果你能保证都是中文的年月这种格式,我倒是有一个好办法<br>import arrow<br><br>t1= u"2018 年 01 月 1"<br>t2= u"2018 年 02 月 22"<br>t3= u"2018 年 3 月 27 日"<br>tt = [t1,t2,t3]<br><br>date_format = ['YYYY 年 M 月 D','YYYY 年 M 月 DD','YYYY 年 MM 月 D','YYYY 年 MM 月 DD']<br><br>def format_date(raw_date):<br> for d in date_format:<br> try:<br> dt = arrow.get(raw_date,d).date()<br> # if you want str date with custom format<br> # dt = arrow.get(raw_date,d).format('YYYY-MM-DD')<br> print(f'time is [{dt}]')<br> break<br> except:<br> continue<br><br>for t in tt:<br> format_date(t)<br>
我去,果然是时间问题。
#2 难道不是 3 月就有 37 日😂

