关于 python3
上的删除前导零,我遇到了几个答案( 1 、 2 、 3 ) datetime
对象。
投票最多的人之一 answers状态:
On Windows, you would use #, e.g.
%Y/%#m/%#d
上面的代码对我不起作用。我也试过 Linux 解决方案,它使用 -
而不是 #
, 没有成功。
代码:
loop_date = "1950-1-1"
date_obj = datetime.strptime(loop_date, '%Y-%m-%d') # or '%Y-%#m-%#d' which produces the errors below
date_obj += timedelta(days=1)
print(date_obj)
# This the prints `1954-01-02` but I need `1954-1-2`
回溯:
Traceback (most recent call last):
File "C:/collect_games.py", line 84, in <module>
date_obj = datetime.strptime(loop_date, '%Y-%-m-%d')
File "E:\Anaconda3\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "E:\Anaconda3\lib\_strptime.py", line 354, in _strptime
(bad_directive, format)) from None
ValueError: '#' is a bad directive in format '%Y-%#m#%d'
解决此问题的最 pythonic 方法是什么?
最佳答案
您混淆了解析格式(将字符串转换为 dt)和格式化(将 dt 转换为字符串):
这适用于 linux(或通过 http://pyfiddle.io 在线):
import datetime
dt = datetime.datetime.now()
# format datetime as string
print(datetime.datetime.strftime(dt, '%Y-%-m-%-d')) # - acts to remove 0 AND as delimiter
# parse a string into a datetime object
dt2 = datetime.datetime.strptime("1022-4-09", '%Y-%m-%d')
print(dt2)
输出:
2018-4-5
1022-04-09 00:00:00
-
在格式化字符串时删除前导 0 并作为分隔符 - 对于解析它只需要作为分隔符放置 - 解析适用于 02
或 2
表示 %m
这适用于 Windows (VS2017):
from datetime import datetime, timedelta
loop_date = "1950-1-1"
date_obj = datetime.strptime(loop_date, '%Y-%m-%d')
date_obj += timedelta(days=1)
print(date_obj) # output the datetime-object
print(datetime.strftime(date_obj,'%Y-%#m-%#d')) # output it formatted
输出:
1950-01-02 00:00:00
1950-1-2
关于python - 不带前导零的日期时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674902/