不带前导零的日期时间对象

Posted

技术标签:

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

关于python3datetime 对象上删除前导零,我遇到了几个答案(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 并作为分隔符 - 解析时只需将其放置为分隔符 - 解析适用于 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 时间应用“删除过滤器”(-)。我会将您的答案标记为正确。谢谢。

以上是关于不带前导零的日期时间对象的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中的NSDateFormatter日期格式解析总结

javascript Date format(js日期格式化)

如何在没有前导零的情况下转换配置单元中的日期

日期相关函数

pgSQL:插入日期格式(前导零)?

dateFormat时间格式