从数字中获取月份名称

Posted

技术标签:

【中文标题】从数字中获取月份名称【英文标题】:Get month name from number 【发布时间】:2011-09-27 07:18:48 【问题描述】:

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

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

date.tm_month()

如何获取字符串march

【问题讨论】:

【参考方案1】:
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

返回:12 月

更多关于Python doc website的信息


[编辑:来自@GiriB 的精彩评论] 您还可以使用%b,它返回月份名称的短符号。

mydate.strftime("%b")

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

【讨论】:

如果您只需要知道给定数字 (1 - 12) 的月份名称,这不是很有帮助,因为当天无关紧要。 calendar.month_name[i] 或 calendar.month_abbr[i] 在这里更有用。 mydate.strftime("%b") 返回月份名称的简写。 (对于上面的例子,它会返回Dec OP希望使用整数作为输入,而不是 datetime.datetime 对象。您可以使用 mydate = datetime.datetime(2019, integer , 1, 0, 0) 但它相当难看跨度> 我看不出这是如何回答问题的。 请注意,如果使用非英语语言环境,%B 可能会在错误的情况下返回月份名称。例如对于 ru_RU 语言环境,%B 返回“января”而不是“январь”。【参考方案2】:

Calendar API

从中可以看出calendar.month_name[3]会返回March,而0的数组索引是空字符串,所以也不用担心零索引。

【讨论】:

您也可以使用 calendar.month_abbr[i] 作为短月份名称 - 例如三月。 注意:您可能需要在文件顶部import calendar 才能使用它。 如果有人想在 pandas 中执行此操作,解决方案在这里:***.com/questions/36010999/…。只是这是在字符串格式问题中查找月份名称时出现的第一个结果。想放在这里以防万一。【参考方案3】:
import datetime

monthinteger = 4

month = datetime.date(1900, monthinteger, 1).strftime('%B')

print month

四月

【讨论】:

有趣。我喜欢这个观点。最好指出,对于这个用例,年份和月份的数字日期 (1..31) 是不相关的,并且不会更改此函数调用的输出。这就是为什么可以用任意(但有效)值对它们进行硬编码。通常,突出显示您的答案中专门解决 OP 问题的部分是一个好主意,并指出使用代码时的任何注意事项。解释增加了长期价值,促进了知识的传播,并增加了投票的可能性。通常不鼓励仅使用代码回答,以保持高质量 另外,在这里包含 %B 的含义会很有帮助,这样未来的访问者可以快速了解此功能的方式/原因,以及您的代码如何工作,并可以立即将其应用到他们的自己的代码。解释有助于快速吸收知识,提供完全不言自明的解决方案;-)。【参考方案4】:

如果您只需要知道给定数字 (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 之间的区别 这很有帮助,我建议在您的示例中使用range(1, 13),这样您就可以在输出中获得全部 12 个月。 好点。 range(start, end) 从开始到结束,但不包括结束。即使用 start ... end-1。【参考方案5】:
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'

【讨论】:

【参考方案6】:

一次打印所有月份:

 import datetime

 monthint = list(range(1,13))

 for X in monthint:
     month = datetime.date(1900, X , 1).strftime('%B')
     print(month)

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

这就是我要做的:

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

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

【讨论】:

【参考方案9】:

部分goodanswers已经使用calendar,但尚未提及设置locale的效果。

日历根据当前区域设置月份名称,例如法语:

import locale
import calendar

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

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

如果您打算在代码中使用setlocale,请务必阅读文档中的tips and caveatsextension writer 部分。此处显示的示例不代表应如何使用。特别是从这两个部分:

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

扩展模块不应该调用 setlocale() […]

【讨论】:

很好的补充,只是我建议添加一个后备文化或只是将 setLocale 调用包装在 try/except 中,因为如果该文化不可用,你会得到一个异常(在尝试这个之后发生在我身上;)) 我想我会保留代码,因为设置语言环境可能不是您在该代码附近无论如何都会做的事情。我只是想强调设置语言环境如何影响来自calendar 的值。我也许可以更新文本。【参考方案10】:

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

所有 strftime 参数的列表。月份名称和诸如格式化之类的好东西会留下零填充。阅读完整页面,了解诸如“幼稚”论点的规则之类的内容。以下是简要清单: %a 周日、周一、...、周六

%A 星期日、星期一、……、星期六

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

%d 月中的第 01、02、...、31 天

%b 一月、二月、...、十二月

%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 上午或下午。

%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

%% 文字 '%' 字符。

【讨论】:

【参考方案11】:

对于月份数字的任意范围

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

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

【讨论】:

【参考方案12】:

此脚本用于展示如何获取数据框中月份变量/列的日历月份缩写。请注意,假设月份列/变量的值都是数字,可能存在一些缺失值。

# Import the calendar module
  import calendar
    
# Extract month as a number from the date column
  df['Month']=pd.DatetimeIndex(df['Date']).month

# Using list comprehension extract month abbreviations for each month number
 df['Month_abbr']=[calendar.month_abbr[int(i)] if pd.notna(i) else i for i in df['Month']]

【讨论】:

添加一个关于你的代码如何工作的描述会很好;这将进一步帮助访问者 @BusyProgrammer 谢谢你的建议,我现在已经添加了描述。【参考方案13】:

您可以使用我的手动功能,而不是导入或下载新的库:

将代码复制到一个新的 .py 文件并运行它

快速解释:

更改 your_number 并打印 month_from_number,您将获得月份

    your_number = 10

    def num_to_month(*args, **kwargs):

        num = kwargs.get("num", None)

        if int(num) <= 12 and int(num) > 0:

            list_of_months = '1': 'January', '2': 'February', '3': 'March',
                              '4': 'April', '5': 'May', '6': 'June', '7': 'July',
                              '8': 'August', '9': 'September', '10': 'October',
                              '11': 'November', '12': 'December'

            return list_of_months[num]

        else:

            print('num_to_month function error: "num=' + str(num) + '"')

    month_from_num = num_to_month(num=str(your_number))

    print(month_from_number)

结果将是 10 月

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。【参考方案14】:

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

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

【讨论】:

如其他答案所示,此功能已存在于内置 calendar 模块中。创建自己的函数来复制相同的结果有什么好处?此外,字典会比一系列 elif 语句快得多。 除所有其他问题外,您的功能仅适用于英语语言环境

以上是关于从数字中获取月份名称的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Presto 中的日期获取月份名称

如何从 Power BI 中的月份编号获取月份名称?

从月份编号获取月份名称

如何从 SQL Server 中的日期获取月份编号(不是月份名称)?

从jooq中的日期获取月份名称

从日期获取月份名称