当使用python strftime时,如果日期的前0在10之前,有没有办法删除它,即01是1呢?找不到一个%的东西?
谢谢!
实际上,我也遇到了同样的问题,我意识到,如果在%和字母之间添加一个连字符,就可以去掉前导零。
例如%Y/%-m/%-d。
这只适用于UNIX(Linux、OS X),而不是Windows(包括Cygwin)。在Windows上,您可以使用#,例如%Y/%#m/%#d。
		
		
- 仅适用于python 2.x
 
- 甚至不适合我,给出一个valueerror(windows,python 2.6)
 
- 在Linux上工作,这通常已经足够好了。
 
- 适用于我,linux python2.6!+给Ryan和Cory的1s!
 
- 很好,python 3,linux
 
- 不适用于OSX:。-(
 
- 它在OSX上对我很有用,但我正在使用python.org中的python 2.7.2。
 
- 在OSX和Linux(Debian)上都为我工作过
 
- 适用于OS X 10.8.5和Python 2.7.2,但不适用于Windows 7 Pro 64位和Python 2.7.3。
 
- 谢谢你给我这么好的建议。为Ubuntu 12.4 Django-1.5工作得很有魅力
 
- 为什么这不适用于Windows,而适用于Linux?
 
- @我问了一个关于这个的问题:—)这里是答案->stackoverflow.com/questions/28894172/…
 
- 我得到了ValueError: '-' is a bad directive in format '%b %-d, %Y'。OSX,python 2.7。
 
- 它在使用Python3.5的OSX上对我很有用
 
- %#d在Windows上也会这样做。
 
- 我得到了valueerror,使用LinuxJupyter笔记本
 
- 不能在Alpine(Linux)上工作,因为它会生成一个空字符串而没有任何期望!
 
- 不知道窗户上的事!
 
- 在Ubuntu Linux上使用python 3.5.2
 
- 也适用于C。
 
- 在Mac上对我来说很好。谢谢!
 
- 不适用于Win 10.0.17134 N/A版本17134+python 3.6.0 ValueError: '#' is a bad directive in format '%a. %#d %B %Y, %H:%M'
 
- 也适用于Ruby。
 
 
	  
从python2.6开始,随着format方法的出现,我们可以做到这一点:
1 2 3
   | >>> import datetime 
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now()) 
'2013/4/19'  | 
 
尽管可能超出了原始问题的范围,但对于更有趣的格式,您可以执行以下操作:
1 2
   | >>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now()) 
'Wednesday December 3, 2014'  | 
 
。
从python3.6开始,可以用内联格式化字符串表示:
1 2 3 4 5 6 7
   | Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21)  
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type"help","copyright","credits" or"license" for more information. 
>>> import datetime 
>>> dt = datetime.datetime.now() 
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}' 
'Monday August 29, 2016'  | 
 
。
		
		
- 在所有平台上工作,这始终是一个好方法。
 
- 很不错的!不幸的是,如果你想使用像time.strftime('%A %B %d, %Y')这样的文本表示法,就不能单独工作了,它产生(现在,在英语中)Tuesday October 07, 2014。
 
- @Pekkakl&228;rck——我直到现在才注意到你的评论。事实证明,datetime指定了一个非常有趣的__format__钩子,允许您编写类似的东西。
 
- 一个问题是'{dt.hour}'使用的是24小时时钟:(。使用第二个选项仍然会使您回到在Windows上使用'{%#I}'和在Unix上使用'{%-I}'。
 
- 说得对。我从来没有在代码中使用12小时的时钟表示,所以我没有考虑过这种情况。
 
- 我建议查看关于格式功能的附加文档:pyformat.info
 
 
	  
 
根据http://docs.python.org/library/time.html的说法,有些平台可能支持%和字母之间的宽度和精度规范(例如"d"表示每月的某一天),但这绝对是一个不可移植的解决方案(例如,在我的Mac上不起作用)。也许您可以在strftime之后使用字符串替换(或re,用于非常糟糕的格式)来解决这个问题?例如。:
1 2 3 4 5 6
   | >>> y 
(2009, 5, 7, 17, 17, 17, 3, 127, 1) 
>>> time.strftime('%Y %m %d', y) 
'2009 05 07' 
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ') 
'2009 5 7'  | 
 
		
		
- 这对2000年1月1日不起作用:)
 
- @你什么意思?结果应该是"2000年1月1日"
 
- @用户上述代码检查0之前的空白,如果"2000年1月1日"不存在。
 
- 我读,哭,骂,用。谢谢。
 
 
	  
1 2 3 4
   | >>> import datetime 
>>> d = datetime.datetime.now() 
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','') 
'5/5/2011'  | 
 
		
		
- 这是2000年1月1日的作品,亚历克西斯不作品。
 
- 做.replace('X0','X').replace('X','')有什么意义?就这样做,会很好的。
 
- @马可博内利:试试你对"x12/x12/14"这个字符串的建议,你会看到的。
 
- @我明白了,谢谢你的澄清。
 
- 这是黑客,但这是一个Python黑客。
 
 
	  
以下是GNUC库中strftime()支持的修改器的文档。(正如人们之前所说,它可能不便于携带。)您可能感兴趣的是:
它在我的python(Linux)上工作。我不知道它是否适合你。
		
		
- %在Windows w/python 2.6上,e对我来说失败了。我猜这是尼克斯的专案。太糟糕了:(
 
- 这是最干净、最通用的解决方案——至少在尼克斯系统上。这在OSX上工作。
 
- 与上面的%-d一样,它在OS X 10.8.5和Python 2.7.2中工作,但在Windows7 Pro 64位和Python 2.7.3中不工作。
 
- 这对我来说适用于Windows7SP1和Python3.5.1。
 
- 这引入了一个额外的空间,而不是前导零,所以如果您正在寻找一个精确的匹配,这可能不是它。>>>one=datetime.datetime(2019、5、1、23、28、48、175214)>>>one.strftime('%b%e%h')'May 1 23'>>>11=datetime.datetime(2019、5、11、23、28、48、175214)>>>11.strftime('%b%e%h')'May 11 23'
 
 
	  
在Windows上,添加一个"",如"%m%d%y%i:%m:%s%p"
参考:https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
 
参加聚会已经很晚了,但江户十一〔二十二〕在我这边工作。
datetime.now().strftime('%B %-d, %Y')生产类似"2014年11月5日"的产品。
干杯:)
		
		
- 酷,有没有提到这个?
 
- 前导答案的副本?stackoverflow.com/a/2073189/389812
 
- 我的Windows系统中的ValueError: Invalid format string。
 
 
	  
我发现django模板日期格式过滤器既快捷又简单。它去掉前导零。如果您不介意导入django模块,请检查它。
http://docs.djangoproject.com/en/dev/ref/templates/builtins/日期
1 2
   | from django.template.defaultfilters import date as django_date_filter 
print django_date_filter(mydate, 'P, D M j, Y')  | 
 
号
		
		
- 请注意,如果您像我一样,不在Django中构建应用程序,则需要告诉Django您不需要配置它:import django.confdjango.conf.settings.configure()。
 
 
	  
请看下面的-:
1 2 3 4 5 6 7 8
   | >>> from datetime import datetime 
>>> datetime.now().strftime('%d-%b-%Y') 
>>> '08-Oct-2011' 
>>> datetime.now().strftime('%-d-%b-%Y') 
>>> '8-Oct-2011' 
>>> today = datetime.date.today() 
>>> today.strftime('%d-%b-%Y') 
>>> print(today)  | 
 
。
		
		
- "%-d-%b-%y"在python 2.6.6中不起作用
 
- 也不适用于Win7中的2.7.8。
 
 
	  
只需这样使用replace:
埃多克斯1〔25〕
它将输出:
对于%d,可以使用int()将其转换为整数,然后它将自动删除前导0并变为整数。然后可以使用str()将其转换回字符串。
		
		
- op question是一个在调用strftime时使用格式说明符的解决方案,而不是一个涉及str()的滚动您自己的解决方案。
 
- 回答得好,别听戴夫·胡珀的话
 
 
	  
 
根据Alex的方法,这对字符串开头和空格后的情况都有效:
1
   | re.sub('^0|(?<= )0', '',"01 January 2000 08:00am")  | 
 
我喜欢这个比.format或-d更好,因为这是跨平台的,允许我继续使用strftime(获得像"十一月"和"星期一")。
旧问题,但strftime中的%l(小写L)对我有效:但这可能不适用于所有人,因为我发现的python文档中没有列出它。
1 2 3
   | import datetime 
now = datetime.datetime.now() 
print now.strftime("%b %_d")  | 
 
。
		
		
- 这将用空格替换前导零,而这不是操作所要求的。
 
- 使用python 3.5的ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'。
 
 
	  
因为python实际上只是在您的平台上调用C语言strftime(3)函数,所以可能有一些格式字符可以用来控制前导零;请尝试man strftime并查看一下。但是,当然,结果是不可移植的,正如Python手册将提醒您的那样。-)
我会尝试使用一个新的风格的datetime对象,它具有t.year和t.month和t.day等属性,并通过%操作符的正常、高性能的格式化,它支持前导零的控制。有关详细信息,请参阅http://docs.python.org/library/datetime.html。更好的是,如果您的python有"".format()操作符并且更加现代,那么就使用它;它也有许多数字格式选项。请参见:http://docs.python.org/library/string.html字符串格式。
%d支持Python3.6.5中的两种(前导零和无前导零)功能(希望在后续版本中也支持)。
。
 
例如,即使在同一操作系统的不同版本之间使用"%-d"也不可移植。更好的解决方案是单独提取日期组件,并在每个组件的日期特定格式运算符和日期属性访问之间进行选择。
1 2
   | e = datetime.date(2014, 1, 6) 
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)  | 
 
。