不带前导零的日期时间对象
Posted
技术标签:
【中文标题】不带前导零的日期时间对象【英文标题】:Datetime Object without leading zero 【发布时间】:2018-09-15 10:13:28 【问题描述】:关于python3
datetime
对象上删除前导零,我遇到了几个答案(1、2、3)。
投票最多的answers 状态之一:
在 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`
追溯:
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方法是什么?
【问题讨论】:
你在这里解析一个时间 datetime ...-
在将日期时间格式化为字符串时应用 .... python 不需要在字符串中使用02
来理解它的月份或任何...将月份从字符串解析为日期时间对象?
删除%
和m
之间的-
。
我需要在没有前导零的情况下格式化输出,而我当前的代码不会发生这种情况..
@Kasramvd 在 php 中,您可以使用 j
表示不带前导零的月份,或使用 d
表示带前导零的月份
您正在创建一个具有标准表示的datetime
对象。删除这些零是另一个问题,与对象的字符串表示有关。
【参考方案1】:
您混淆了解析(将字符串转换为 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
for %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 3.6
上产生:Traceback (most recent call last): File "C:/collect_games.py", line 7, in <module> print(datetime.datetime.strftime(dt, '%Y-%-m-%d')) ValueError: Invalid format string
并且与问题的代码没有什么不同,会产生相同的错误。
@PedroLobito 将我的代码复制到 pyfiddle.io - 它适用于 2.7 和 3.6 吗?
您的代码运行良好,但在我的 windows python3.6 上运行不正常。我几乎可以肯定这是一个安装问题,而不是语法问题。
@PedroLobito 查看编辑。 pyfiddle.io 是一个 linux 服务器
这适用于 Windows (VS2017)。奇怪,因为我已经尝试过了……我想我只能在 print
时间应用“删除过滤器”(-
)。我会将您的答案标记为正确。谢谢。以上是关于不带前导零的日期时间对象的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发中的NSDateFormatter日期格式解析总结