Ped*_*ito 2 python datetime python-3.x
我已经遇到好几个答案(1,2,3关于)去除前导零的python3 datetime对象。
投票最多的答案之一指出:
在 Windows 上,您将使用 #,例如
%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`
Run Code Online (Sandbox Code Playgroud)
追溯:
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'
Run Code Online (Sandbox Code Playgroud)
这个问题最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)
Run Code Online (Sandbox Code Playgroud)
输出:
2018-4-5
1022-04-09 00:00:00
Run Code Online (Sandbox Code Playgroud)
该-格式化时字符串的作用是去除导致0 AND作为分隔符-解析只需要放置作为分隔符-解析在作品在任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
Run Code Online (Sandbox Code Playgroud)
输出:
1950-01-02 00:00:00
1950-1-2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5381 次 |
| 最近记录: |