Numaradan ay adını al


230

Ay numarasını ay numarasından nasıl alabilirim?

Mesela, 3geri dönmek istersemmarch

date.tm_month()

Dize nasıl alınır march?

Yanıtlar:


269

Takvim API'sı

Bundan, calendar.month_name[3]bunun döneceğini Marchve dizinin dizini 0boş dize olduğunu görebilirsiniz, bu nedenle sıfır indeksleme konusunda da endişelenmenize gerek yoktur.


35
Ayrıca kısa bir ay adı için calendar.month_abbr [i] kullanabilirsiniz - örn. Mar
Jay Sheth

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

İade: Aralık

Python doc web sitesinde biraz daha bilgi


[EDIT: @GiriB'den harika yorum] %bAy adı için kısa gösterimi döndüren öğeyi de kullanabilirsiniz .

mydate.strftime("%b")

Yukarıdaki örnek için geri dönecektir Dec.


7
Geçerli bir günün önemli olmadığı için, belirli bir sayı için ay adını bilmeniz gerekiyorsa (1 - 12) bu çok yararlı değildir. calendar.month_name [i] veya calendar.month_abbr [i] burada daha kullanışlıdır.
Jay Sheth

11
mydate.strftime("%b")ay adı için kısa gösterim döndürür. (Yukarıdaki örnek için geri dönecektir Dec)
GiriB

3
OP, bir datetime.datetime nesnesi değil, girdi olarak bir tamsayı kullanmak ister. Mydate = datetime.datetime (2019, integer, 1, 0, 0) kullanabilirsiniz, ancak oldukça çirkin
Rutger Hofste

Bunun soruyu nasıl cevapladığını göremiyorum.
cglacet

57
import datetime

monthinteger = 4

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

print month

Nisan


35

Geçerli bir günün önemli olmadığı için, belirli bir sayı için ay adını bilmeniz gerekiyorsa (1 - 12) bu çok yararlı değildir.

calendar.month_name[i]

veya

calendar.month_abbr[i]

burada daha kullanışlıdır.

İşte bir örnek:

import calendar

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

Örnek çıktı:

January
Jan

February
Feb

March
Mar

...

Cevabınız için teşekkür ederim. bir öneri ekleyebilirseniz, bu kod ve nasıl arasındaki farkı göstermek için bazı giriş ve çıkış örnekleri ekleyebilir month_namevemonth_abbr
JMax

Bu yardımcı olur, range(1, 13)örneğin 12 ayın tamamını çıktıda almanızı öneririz .
davejagoda

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

10

(Benim gibi) bir veri çerçevesinde bir aylık sütun sayısı olması durumunda bunu sunacağım:

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

10

Yapacağım şey bu:

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)

Çıktılar:

>>> September

(Bu Yazdığım Gerçek Tarihti)


3

Bazı iyi yanıtlar zaten takvimi kullanıyor, ancak yerel ayarlamanın etkisinden henüz bahsedilmedi.

Örneğin, Fransızca:

import locale
import calendar

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

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

setlocaleKodunuzda kullanmayı planlıyorsanız , ipuçları ve uyarılar ile uzantı yazarı bölümlerini belgelerden okuduğunuzdan emin olun . Burada gösterilen örnek, nasıl kullanılması gerektiğini temsil etmez. Özellikle, bu iki bölümden:

Genellikle bir yan etkisi olarak tüm programı etkiler, çünkü bazı kütüphane rutin setlocale () çağırmak için kötü bir fikirdir […]

Genişletme modülleri asla setlocale () çağrmamalıdır […]


1
İyi bir ek olarak, sadece bir geri dönüş kültürü eklemenizi veya setLocale çağrısını bir denemede / hariç
tutmayı öneririm

Yerel ayarı ayarlamak muhtemelen yine de bu kod yakın yapacağınız bir şey olmadığı için olduğu gibi kodu bırakacağım düşünüyorum. Sadece yerel ayarın da değerleri nasıl etkilediğini vurgulamak istedim calendar. Metni güncelleyebilirim.
cglacet

1

Arbitaray ay sayısı aralığı için

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

doğru liste verecektir. startAy-tamsayı listesinde Ocak ayının başladığı noktadan -parametreyi ayarlayın .


0

8.1. datetime - Temel tarih ve saat türleri - Python 2.7.17 belgeleri https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Tüm strftime argümanlarının listesi. Ayların isimleri ve biçimlendirme gibi güzel şeyler sıfır doldurdu. "Naif" argümanlar için kurallar gibi şeyler için tam sayfayı okuyun. Kısaca liste:% a Sun, Pzt,…, Cmt

% Bir Pazar, Pazartesi,…, Cumartesi

Haftalık sayı olarak% w; burada 0 Pazar

% d Ayın günü 01, 02,…, 31

% b Oca, Şub,…, Ara

% B Ocak, Şubat,…, Aralık

% m Ay sayısı sıfır dolgulu 01, 02,…, 12

% y 2 haneli yıl sıfır dolgulu 00, 01,…, 99

% Y 4 haneli Yıl 1970, 1988, 2001, 2013

% H Saat (24 saat) sıfır dolgulu 00, 01,…, 23

% I Saat (12 saatlik zaman) sıfır dolgulu 01, 02,…, 12

% p AM veya PM.

% M Dakika sıfır dolgulu 00, 01,…, 59

% S İkinci sıfır dolgulu 00, 01,…, 59

% f Mikrosaniye sıfır dolgulu 000000, 000001,…, 999999

% z UTC farkı + HHMM veya -HHMM +0000, -0400, +1030

% Z Saat dilimi adı UTC, EST, CST

% j Yılın günü sıfır dolgulu 001, 002,…, 366

% U Haftanın numarası sıfır dolgulu, İlk Pazar gününden önceki günler 0 haftadır

% W Yılın haftası sayısı (ilk gün Pazartesi)

% c Yerel ayarın tarih ve saat gösterimi. Sal 16 Ağu 21:30:00 1988

% x Yerel ayarın tarih gösterimi. 16/08/1988 (tr_TR)

% X Yerel ayarın zaman gösterimi. 21:30:00

%% değişmez '%' karakteri.


-6

Numaraları karşılık gelen aya çevirerek kendi fonksiyonumu oluşturdum.

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"

Sonra işlevi çağırabilirim. Örneğin:

print (month_name (12))

Çıktılar:

>>> December

3
Diğer cevaplarda gösterildiği gibi, bu işlev yerleşik calendarmodülde zaten mevcuttur . Aynı sonuçları çoğaltmak için kendi işlevinizi yaratmanın ne yararı olabilir? Ayrıca, bir sözlük bir dizi elif ifadesinden çok daha hızlı olacaktır.
Tom

4
Diğer tüm sorunların yanı sıra, işleviniz yalnızca İngilizce yerel ayar için çalışır
mick88
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.