【问题标题】:Datetime Object without leading zero不带前导零的日期时间对象
【发布时间】:2018-09-15 10:13:28
【问题描述】:

关于python3datetime 对象上删除前导零,我遇到了几个答案(123)。

投票最多的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 对象。删除这些零是另一个问题,与对象的字符串表示有关。

标签: python python-3.x 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 并作为分隔符 - 解析时只需将其放置为分隔符 - 解析适用于 022 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 &lt;module&gt; 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 时间应用“删除过滤器”(-)。我会将您的答案标记为正确。谢谢。
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多