【问题标题】:How do I convert date to Day/Month/Year (20/Jan/2012) in python如何在 python 中将日期转换为日/月/年(2012 年 1 月 20 日)
【发布时间】:2014-12-16 04:08:00
【问题描述】:

我已经编写了一个脚本,我需要更改日期,当脚本运行时它会输出此消息

output_messaging("*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON " + 
    str(datetime.date.today().day) + "/" + str(datetime.date.today().month) + "/" +            
    str(datetime.date.today().year) + " AT " + str(datetime.datetime.now().hour) + ':' +   
    str(datetime.datetime.now().minute) + ':' + str(datetime.datetime.now().second) + " ***\n\n")

这给了

*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON 20/2/2012 AT 18:3 ***

我需要将日期转换为

20/Feb/2012,我该怎么做?

【问题讨论】:

标签: python


【解决方案1】:

为此使用strftime——这比做一堆自定义连接要容易得多。有一个格式约定表here

>>> s = "*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON "\
...     "%d/%b/%y AT %H:%M:%S ***\n\n"
>>> datetime.datetime.now().strftime(s)
'*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON 28/Feb/12 AT 11:44:03 ***\n\n'

正如eumiro 的回答所表明的,您还可以使用稍微修改的格式字符串来反转上述调用,如下所示:

>>> s = "*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON "\
...     "{0:%d/%b/%y} AT {0:%H:%M:%S} ***\n\n"
>>> s.format(datetime.datetime.now())
'*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON 28/Feb/12 AT 13:41:10 ***\n\n'

之所以有效,是因为format 只是调用了datetime.datetime 对象的(令人震惊的未充分记录的)__format__ 方法。例如:

>>> datetime.datetime.now().__format__('The current month is %B')
'The current month is February'

这也适用于其他类型:

>>> (16).__format__('x')
'10'

有关__format__的更多信息,请参阅PEP 3101

【讨论】:

  • 看起来是一个正确的解决方案,所以我 +1。如果您怀疑有人投票不当,您可以将其举报以引起版主注意。
  • @MarkRansom,对于它的价值,我还想知道 eumiro 的方法是如何工作的。以上是我通过一些调查得出的结论。但我很惊讶 Python 的这部分文档记录得这么差。
【解决方案2】:
output_messaging("*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON {0:%d/%b/%Y} AT {0:%H:%M} ***".format(datetime.datetime.now()))

打印

*** DATA REFRESH FOR STREETWORKS DATA EXECUTED ON 28/Feb/2012 AT 17:41 ***

More information about datetime formatting

【讨论】:

  • 我很想知道字符串format 是如何最终调用strftime
【解决方案3】:
>>> from datetime import date
>>> day = date.today()
>>> day.strftime('%d/%b/%y')
'28/Feb/12'

【讨论】:

    【解决方案4】:
    import datetime
    print datetime.datetime.now().strftime('%d/%b/%Y')
    # 28/Feb/2012
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多