使用Python时strftime,有没有办法删除日期的前0,如果它在10日之前,即.那01是1吗?找不到%那个东西?
谢谢!
在Ruby 1.9程序中,我想格式化当前时间Thu 1:51 PM.我应该在一天中的某个小时使用什么格式的代码(1在本例中)?
Time.now.strftime '%a %I:%M %p' #=> "Thu 01:51 PM"
Time.now.strftime '%a %l:%M %p' #=> "Thu 1:51 PM"
Run Code Online (Sandbox Code Playgroud)
%I有一个前导零(01).%l有一个领先的空间( 1).我没有在strftime文档中看到小时的任何其他格式代码.我无法使用,.lstrip因为空间位于字符串的中间.我可以使用.gsub(/ +/, " "),但我想知道是否有一个更少的hacky,更简单的方式.
我可能错过了一个明显的平台差异,我应该适应但是我在尝试做时间格式时会得到这个(Python2.7)......
在Linux环境中:
>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
'Tue, 29-May-2012 21:42:04 GMT'
Run Code Online (Sandbox Code Playgroud)
在Windows中:
>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid format string
Run Code Online (Sandbox Code Playgroud)
从time.gmtime()返回的元组看起来是一样的,所以我不能完全确定我需要改变什么.
出于我正在制作的Web API查询的目的,我正在尝试格式化由管道("|")分隔的一堆日期,向后计数七天,并将每个日期添加到复合字符串中.我阅读了文档,并将date.today()和datetime.timedelta的组合拼凑在一起.我写的方法:
def someMethod():
ret = ''
pythonic_date = datetime.date.today()
for i in range(0, 8):
pythonic_date -= datetime.timedelta(days=1)
ret += "SomePage" + datetime.date.today().strftime("%B" + " ")
ret += str(pythonic_date.day).lstrip('0')
ret += ", " + str(pythonic_date.year) + "|"
ret = ret[0:len(ret) - 1]
return ret
Run Code Online (Sandbox Code Playgroud)
我希望得到以下输出:
SomePage/June 2,2015 | SomePage/June 1,2015 | SomePage/2015年5月31日| SomePage/2015年5月30日| SomePage/2015年5月29日| SomePage/2015年5月28日| SomePage/2015年5月27日| SomePage/2015年5月26日
相反,我得到以下输出:
SomePage/2015年6月2日| SomePage/2015年6月1日| SomePage/2015年6月31日| SomePage/2015年6月30日| SomePage/June 29,2015 | SomePage/June 28,2015 | SomePage/June 27,2015 | SomePage/2015年6月26日
我看到timedelta在这里使用只是天真地循环日期类对象中的日期字段,而不是在整个日期上操作.我有两个问题:
编辑:第二次看,我写的功能甚至无法处理多年之间的移动.说真的,有什么更好的方法呢?日期时间文档(https://docs.python.org/3/library/datetime.html#datetime.timedelta.resolution)非常密集.
具体来说,我在 Windows上使用%-d和时遇到问题%-m。
我得到的错误很简单
output_dict.update({"DOB1": f"{dob.strftime('%-m/%-d/%Y') if not dob is None else 'UniqueID' + str(row)}"})
ValueError: Invalid format string
Run Code Online (Sandbox Code Playgroud)
我的格式字符串如下所示:
dob.strftime('%-m/%-d/%Y')
Run Code Online (Sandbox Code Playgroud)
我相当肯定这是因为我是 Windows,但我想知道是否有一种独立于平台的方法来解决这个问题,或者我是否做错了导致这个错误的其他事情。
我看到了一些关于%e在 windows 中用于月份的信息,strftime但它用空格代替了 0,但这是不可取的。我试图获得这些确切的输出(我稍后使用类似的格式字符串)1/1/2000和January 1 2000.
我不想使用像{dob.year}ect这样的解决方案,因为我已经有一个格式字符串被放置在其中。
我将不胜感激有关最佳实践的任何想法以及我如何为此实施解决方案。谢谢你。
python ×4
strftime ×2
date ×1
datetime ×1
padding ×1
python-3.x ×1
ruby ×1
ruby-1.9 ×1
time ×1
time-format ×1