从号码中获取月份名称


230

如何从月份编号中获得月份名称?

例如,如果我有3,我想返回march

date.tm_month()

如何获得字符串march

Answers:


269

日历API

从中可以看到calendar.month_name[3]它将返回March,并且的数组索引0为空字符串,因此也无需担心零索引。


35
您还可以使用calendar.month_abbr [I]短暂月份名称-如三月
杰伊谢斯

384
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

返回:12月

有关Python文档网站的更多信息


[编辑:来自@GiriB的出色评论]您还可以使用%b它返回月份名称的缩写。

mydate.strftime("%b")

对于上面的示例,它将返回Dec


7
如果您只需要知道给定数字(1-12)的月份名称,那么它就没有太大帮助,因为当前日期无关紧要。calendar.month_name [i]或calendar.month_abbr [i]在这里更有用。
杰伊·谢思

11
mydate.strftime("%b")返回月份名称的简称。(对于上面的示例,它将返回Dec
GiriB

3
OP希望使用整数作为输入,而不是datetime.datetime对象。您可以使用mydate = datetime.datetime(2019,integer,1,0,0),但它很难看
Rutger Hofste

我看不到这如何回答问题。
cglacet


35

如果您只需要知道给定数字(1-12)的月份名称,这就没有太大帮助,因为当前日期无关紧要。

calendar.month_name[i]

要么

calendar.month_abbr[i]

在这里更有用。

这是一个例子:

import calendar

for month_idx in range(1, 13):
    print (calendar.month_name[month_idx])
    print (calendar.month_abbr[month_idx])
    print ("")

样本输出:

January
Jan

February
Feb

March
Mar

...

谢谢您的回答。如果我想补充一个建议,你可以添加输入和输出的一些例子来说明如何使用此代码之间的差异month_namemonth_abbr
JMAX

这很有用,我建议range(1, 13)在您的示例中使用,这样您就可以在输出中获得全部12个月的时间。
davejagoda

21
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'

10

如果您(像我一样)在数据框中有一列月份数字,我将提供此信息:

df['monthName'] = df['monthNumer'].apply(lambda x: calendar.month_name[x])

10

这就是我要做的:

from datetime import *

months = ["Unknown",
          "January",
          "Febuary",
          "March",
          "April",
          "May",
          "June",
          "July",
          "August",
          "September",
          "October",
          "November",
          "December"]

now = (datetime.now())
year = (now.year)
month = (months[now.month])
print(month)

输出:

>>> September

(这是我写这篇文章的真实日期)


3

一些好的 答案已经利用日历了,但是尚未提到设置语言环境的效果。

例如,法语:

import locale
import calendar

locale.setlocale(locale.LC_ALL, 'fr_FR')

assert calendar.month_name[1] == 'janvier'
assert calendar.month_abbr[1] == 'jan'

如果计划在setlocale代码中使用,请确保阅读文档中的提示和注意事项以及扩展编写器部分。此处显示的示例并不代表应如何使用它。特别是从这两部分中:

在某些库例程中调用setlocale()通常是一个坏主意,因为它的副作用是会影响整个程序[…]

扩展模块永远不要调用setlocale()[…]


1
很好的补充,只是我建议添加一个后备区域性或将setLocale调用包装在try / except中,因为如果该区域性不可用,您会得到一个异常(尝试过此之后才发生;)
firepol

我认为我将按原样保留代码,因为设置语言环境可能不是您在该代码附近所做的任何事情。我只是想强调一下设置语言环境还会如何影响的值calendar。我也许可以更新文本。
cglacet

1

对于arbitaray月度范围

month_integer=range(0,100)
map(lambda x: calendar.month_name[x%12+start],month_integer)

将产生正确的列表。start从一月在月份整数列表中开始的位置调整-parameter。


0

8.1。datetime-基本日期和时间类型-Python 2.7.17文档 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

所有strftime参数的列表。月份的名称以及诸如格式化之类的好东西,将零填满。阅读整页,了解诸如“天真的”参数规则之类的内容。这是简短的列表:%a周日,周一,…,星期六

%A周日,周一,…,周六

%w工作日为数字,其中0是星期日

%d每月的第一天02,...,31

%b 1月,2月,…,12月

%B一月,二月,…,十二月

%m月号,以零填充的01、02,…,12

%y 2位数字年份零填充00、01,…,99

%Y 4位数字1970、1988、2001、2013年

%H小时(24小时制),零填充00,01,…,23

%I小时(12小时制)零填充01,02,…,12

%p AM或PM。

%M分钟零填充00、01,…,59

%S第二个零填充00、01,...,59

%f微秒零填充000000,000001,…,999999

%z UTC偏移量,格式为+ HHMM或-HHMM + 0000,-0400,+ 1030

%Z时区名称UTC,EST,CST

%j一年中的当日零填充001、002,...,366

%U年份的周号零填充,第一个星期日之前的天是第0周

%W一年中的第几周(星期一作为第一天)

%c语言环境的日期和时间表示。1988年8月16日星期二21:30:00

%x语言环境的日期表示形式。1988年8月16日(zh_CN)

%X语言环境的时间表示形式。21:30:00

%%文字'%'字符。


-6

我创建了自己的函数,将数字转换为相应的月份。

def month_name (number):
    if number == 1:
        return "January"
    elif number == 2:
        return "February"
    elif number == 3:
        return "March"
    elif number == 4:
        return "April"
    elif number == 5:
        return "May"
    elif number == 6:
        return "June"
    elif number == 7:
        return "July"
    elif number == 8:
        return "August"
    elif number == 9:
        return "September"
    elif number == 10:
        return "October"
    elif number == 11:
        return "November"
    elif number == 12:
        return "December"

然后,我可以调用该函数。例如:

print (month_name (12))

输出:

>>> December

3
如其他答案所示,此功能已存在于内置calendar模块中。创建自己的函数以复制相同的结果可能会有什么好处?而且,字典比一系列elif语句要快得多。
汤姆(Tom)

4
除所有其他问题外,您的函数仅适用于英语语言环境
mick88 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.