Lấy tên tháng từ số


230

Làm thế nào tôi có thể nhận được tên tháng từ số tháng?

Ví dụ, nếu tôi có 3, tôi muốn quay lạimarch

date.tm_month()

Làm thế nào để có được chuỗi march?

Câu trả lời:


269

API lịch

Từ đó bạn có thể thấy điều đó calendar.month_name[3]sẽ trả về Marchvà chỉ mục mảng 0là chuỗi rỗng, do đó, không cần phải lo lắng về việc lập chỉ mục bằng không.


35
Bạn cũng có thể sử dụng calendar.month_abbr [i] cho một tên tháng ngắn - ví dụ: Mar
Jay Sheth

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

Trả về: tháng 12

Một số thông tin khác trên trang web tài liệu Python


[EDIT: nhận xét tuyệt vời từ @GiriB] Bạn cũng có thể sử dụng %bđể trả về ký hiệu ngắn cho tên tháng.

mydate.strftime("%b")

Đối với ví dụ trên, nó sẽ trở lại Dec.


7
Điều này không hữu ích nếu bạn chỉ cần biết tên tháng cho một số đã cho (1 - 12), vì ngày hiện tại không thành vấn đề. calendar.month_name [i] hoặc calendar.month_abbr [i] hữu ích hơn ở đây.
Jay Sheth

11
mydate.strftime("%b")trả về ký hiệu ngắn cho tên tháng. (Ví dụ ở trên, nó sẽ trở lại Dec)
GiriB

3
OP muốn sử dụng một số nguyên làm đầu vào, không phải là đối tượng datetime.datetime. Bạn có thể sử dụng mydate = datetime.datetime (2019, số nguyên, 1, 0, 0) nhưng nó khá xấu xí
Rutger Hofste

Tôi không thấy làm thế nào điều này trả lời câu hỏi.
cglacet

57
import datetime

monthinteger = 4

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

print month

Tháng 4


35

Điều này không hữu ích nếu bạn chỉ cần biết tên tháng cho một số đã cho (1 - 12), vì ngày hiện tại không thành vấn đề.

calendar.month_name[i]

hoặc là

calendar.month_abbr[i]

hữu ích hơn ở đây.

Đây là một ví dụ:

import calendar

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

Đầu ra mẫu:

January
Jan

February
Feb

March
Mar

...

Cảm ơn bạn vì câu trả lời. nếu tôi có thể thêm một đề xuất, bạn có thể thêm một số ví dụ về đầu vào và đầu ra để hiển thị cách sử dụng mã này và sự khác biệt giữa month_namemonth_abbr
JMax

Điều này rất hữu ích, tôi khuyên range(1, 13)bạn nên sử dụng trong ví dụ của mình để bạn có được tất cả 12 tháng trong đầu ra.
davejagoda

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

10

Tôi sẽ cung cấp điều này trong trường hợp (như tôi) bạn có một cột số tháng trong khung dữ liệu:

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

10

Đây là những gì tôi sẽ làm:

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)

Nó xuất ra:

>>> September

(Đây là ngày thực sự khi tôi viết bài này)


3

Một số tốt câu trả lời đã tận dụng lịch nhưng hiệu quả của việc thiết lập miền địa phương vẫn chưa được đề cập được nêu ra.

Ví dụ: bằng tiếng Pháp:

import locale
import calendar

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

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

Nếu bạn có kế hoạch sử dụng setlocalemã của mình, hãy đảm bảo đọc các mẹo và cảnh báophần nhà văn mở rộng từ tài liệu. Ví dụ hiển thị ở đây không đại diện cho cách sử dụng nó. Đặc biệt, từ hai phần này:

Nói chung là một ý tưởng tồi khi gọi setlocale () trong một số thói quen của thư viện, vì là một tác dụng phụ, nó ảnh hưởng đến toàn bộ chương trình [Hồi]

Các mô-đun mở rộng không bao giờ nên gọi setlocale () [Hoài]


1
Ngoài ra, tôi chỉ đề nghị thêm văn hóa dự phòng hoặc chỉ thực hiện cuộc gọi setLocale trong một lần thử / ngoại trừ, vì nếu văn hóa đó không có sẵn, bạn sẽ có một ngoại lệ (xảy ra với tôi sau khi thử điều này;))
firepol

Tôi nghĩ rằng tôi sẽ để lại mã như vậy bởi vì thiết lập ngôn ngữ có thể không phải là điều bạn sẽ làm dù sao gần mã đó. Tôi chỉ muốn làm nổi bật cách thiết lập miền địa phương cũng tác động đến các giá trị từ đó calendar. Tôi có thể cập nhật văn bản.
cglacet

1

Đối với phạm vi số tháng của arbitaray

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

sẽ mang lại danh sách chính xác. Điều chỉnh starttham số từ nơi tháng 1 bắt đầu trong danh sách số nguyên tháng.


0

8.1. datetime - Các loại ngày và giờ cơ bản - Tài liệu Python 2.7.17 https://docs.python.org/2/l Library / datetime.html # strftime-strptime-behavior

Một danh sách của tất cả các đối số strftime Tên của tháng và những thứ tốt đẹp như định dạng không điền. Đọc toàn bộ trang để biết nội dung như quy tắc cho các đối số "ngây thơ". Dưới đây là danh sách ngắn gọn:% a Sun, Mon, Mạnh, Sat

% A chủ nhật, thứ hai, ngày mai, thứ bảy

% w Ngày trong tuần dưới dạng số, trong đó 0 là Chủ nhật

% d Ngày trong tháng 01, 02, Nhận, 31

% b tháng một, tháng hai, tháng mười, tháng mười hai

% B tháng 1, tháng 2, tầm, tháng 12

% m Số tháng dưới dạng số 0, 02, số 12, 12

% y 2 chữ số năm không có đệm 00, 01, Mạnh, 99

% Y 4 chữ số Năm 1970, 1988, 2001, 2013

% H Giờ (đồng hồ 24 giờ) không đệm 00, 01, đánh, 23

% I Giờ (đồng hồ 12 giờ) không có đệm 01, 02, đánh, 12

% p AM hoặc PM.

% M Phút không đệm 00, 01, Nhận, 59

% S Không đệm thứ hai 00, 01, Nhận, 59

% f microsecond zero-độn 000000, 000001, Mạnh, 999999

% Z UTC bù ở dạng + HHMM hoặc -HHMM +0000, -0400, +1030

% Z Tên múi giờ UTC, EST, CST

% j Ngày trong năm không có đệm 001, 002, Mạnh, 366

% U Số tuần của năm không có đệm, Ngày trước Chủ nhật đầu tiên là tuần 0

% W Số tuần trong năm (Thứ hai là ngày đầu tiên)

% c Đại diện ngày và giờ của Locale. Thứ ba ngày 16 tháng 8 21:30:00 1988

% x Đại diện ngày của địa phương. 16/08/1988 (vi_US)

Biểu diễn thời gian của% X Locale. 21:30:00

%% ký tự '%' theo nghĩa đen.


-6

Tôi đã tạo chức năng riêng của mình chuyển đổi số sang tháng tương ứng của họ.

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"

Sau đó tôi có thể gọi hàm. Ví dụ:

print (month_name (12))

Đầu ra:

>>> December

3
Như được hiển thị trong các câu trả lời khác, chức năng này đã tồn tại trong calendarmô-đun tích hợp. Lợi ích gì có thể có khi tạo chức năng của riêng bạn để sao chép các kết quả tương tự? Ngoài ra, một từ điển sẽ nhanh hơn nhiều so với một loạt các câu lệnh elif.
Tom

4
Ngoài tất cả các vấn đề khác, chức năng của bạn chỉ hoạt động cho ngôn ngữ tiếng Anh
mick88
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.