web-dev-qa-db-ger.com

Wie bekomme ich den Wochentag mit einem Datum in Python?

Ich möchte Folgendes herausfinden: Bei einem Datum (datetime-Objekt), was ist der entsprechende Wochentag.

Zum Beispiel ist Sonntag der erste Tag, Montag: der zweite Tag ... und so weiter

Und dann, wenn die Eingabe so etwas wie das heutige Datum ist.

Beispiel

>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday()  # what I look for

Die Ausgabe ist vielleicht 6 (seit Freitag)

405
Fraz

Verwenden Sie weekday() ( docs ):

>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2012, 3, 23, 23, 24, 55, 173504)
>>> datetime.datetime.today().weekday()
4

Aus der Dokumentation:

Gibt den Wochentag als ganze Zahl zurück, wobei Montag 0 und Sonntag 6 ist.

671
Simeon Visser

Wenn Sie das Datum auf Englisch haben möchten:

from datetime import date
import calendar
my_date = date.today()
calendar.day_name[my_date.weekday()]  #'Wednesday'
218
seddonym

Verwenden Sie date.weekday() oder date.isoweekday() .

37
orlp

Eine Lösung ohne Import für Termine nach 1700/1/1 

def weekDay(year, month, day):
    offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
    week   = ['Sunday', 
              'Monday', 
              'Tuesday', 
              'Wednesday', 
              'Thursday',  
              'Friday', 
              'Saturday']
    afterFeb = 1
    if month > 2: afterFeb = 0
    aux = year - 1700 - afterFeb
    # dayOfWeek for 1700/1/1 = 5, Friday
    dayOfWeek  = 5
    # partial sum of days betweem current date and 1700/1/1
    dayOfWeek += (aux + afterFeb) * 365                  
    # leap year correction    
    dayOfWeek += aux / 4 - aux / 100 + (aux + 100) / 400     
    # sum monthly and day offsets
    dayOfWeek += offset[month - 1] + (day - 1)               
    dayOfWeek %= 7
    return dayOfWeek, week[dayOfWeek]

print weekDay(2013, 6, 15) == (6, 'Saturday')
print weekDay(1969, 7, 20) == (0, 'Sunday')
print weekDay(1945, 4, 30) == (1, 'Monday')
print weekDay(1900, 1, 1)  == (1, 'Monday')
print weekDay(1789, 7, 14) == (2, 'Tuesday')

Ich habe das für eine codechef question gelöst.

import datetime
dt = '21/03/2012'
day, month, year = (int(x) for x in dt.split('/'))    
ans = datetime.date(year, month, day)
print ans.strftime("%A")
20

Wenn Sie das Datum auf Englisch haben möchten:

>>> from datetime import date
>>> datetime.datetime.today().strftime('%A')
'Wednesday'

Lesen Sie mehr: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

11

Dies ist eine Lösung, wenn das Datum ein Datumszeitobjekt ist.

import datetime
def dow(date):
    days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    dayNumber=date.weekday()
    print days[dayNumber]
10
Rodrigo

die DateTime-Bibliothek gibt manchmal Fehler mit strptime (), sodass ich auf die Dateutil-Bibliothek umstellte. Hier ist ein Beispiel, wie Sie es verwenden können:

from dateutil import parser
parser.parse('January 11, 2010').strftime("%a")

Die Ausgabe, die Sie daraus erhalten, ist 'Mon'. Wenn Sie die Ausgabe als "Montag" wünschen, verwenden Sie Folgendes:

parser.parse('January 11, 2010').strftime("%A")

Das hat für mich ziemlich schnell funktioniert. Ich hatte Probleme bei der Verwendung der datetime-Bibliothek, weil ich den Wochentag-Namen anstelle der Wochentagsnummer speichern wollte und das Format der datetime-Bibliothek Probleme bereitete. Wenn Sie keine Probleme damit haben, großartig! Wenn Sie es sind, können Sie dies mit einer einfacheren Syntax tun. Hoffe das hilft.

7

Angenommen, Sie erhalten den Tag, den Monat und das Jahr, Sie könnten Folgendes tun:

import datetime
DayL = ['Mon','Tues','Wednes','Thurs','Fri','Satur','Sun']
date = DayL[datetime.date(year,month,day).weekday()] + 'day'
#Set day, month, year to your value
#Now, date is set as an actual day, not a number from 0 to 6.

print(date)
6
mathwizurd

Wenn Sie Grund haben, die Verwendung des datetime-Moduls zu vermeiden, funktioniert diese Funktion.

Hinweis: Es wird angenommen, dass der Wechsel vom julianischen zum gregorianischen Kalender im Jahr 1582 stattgefunden hat. Wenn dies für Ihren Interessenskalender nicht der Fall ist, ändern Sie die Zeile falls das Jahr> 1582: entsprechend ist.

def dow(year,month,day):
    """ day of week, Sunday = 1, Saturday = 7
     http://en.wikipedia.org/wiki/Zeller%27s_congruence """
    m, q = month, day
    if m == 1:
        m = 13
        year -= 1
    Elif m == 2:
        m = 14
        year -= 1
    K = year % 100    
    J = year // 100
    f = (q + int(13*(m + 1)/5.0) + K + int(K/4.0))
    fg = f + int(J/4.0) - 2 * J
    fj = f + 5 - J
    if year > 1582:
        h = fg % 7
    else:
        h = fj % 7
    if h == 0:
        h = 7
    return h
4
Barry Andersen

Wenn Sie nicht nur auf das Modul datetime angewiesen sind, könnte calendar die bessere Alternative sein. Auf diese Weise erhalten Sie beispielsweise die Tagescodes:

calendar.weekday(2017,12,22);

Und das gibt Ihnen den Tag selbst:

days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
days[calendar.weekday(2017,12,22)]

Oder im Stil von Python als One Liner:

["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
4
AnaCronIsm

Wir können Pandas helfen:

import pandas as pd

Wie bereits erwähnt, haben wir:

datetime(2017, 10, 20)

Wenn Sie diese Zeile im Jupyter-Notebook ausführen, erhalten Sie eine Ausgabe wie folgt:

datetime.datetime(2017, 10, 20, 0, 0)

Verwenden von Wochentag () und Wochentag_Name:

Wenn Sie Wochentage im ganzzahligen Format wünschen, verwenden Sie:

pd.to_datetime(datetime(2017, 10, 20)).weekday()

Die Ausgabe wird sein:

4

Und wenn Sie es als Namen des Tages wie Sonntag, Montag, Freitag usw. wünschen, können Sie Folgendes verwenden:

pd.to_datetime(datetime(2017, 10, 20)).weekday_name

Die Ausgabe wird sein:

'Friday'

Wenn Sie eine Datumsspalte in Pandas Dataframe haben, dann:

Angenommen, Sie haben einen Pandas-Datenrahmen mit einer Datumsspalte wie folgt: PdExampleDataFrame ['Dates']. Head (5)

0   2010-04-01
1   2010-04-02
2   2010-04-03
3   2010-04-04
4   2010-04-05
Name: Dates, dtype: datetime64[ns]

Wenn wir den Namen des Wochentags wie Montag, Dienstag usw. wissen möchten, können wir .weekday_name wie folgt verwenden:

pdExampleDataFrame.head(5)['Dates'].dt.weekday_name

die Ausgabe wird sein:

0    Thursday
1      Friday
2    Saturday
3      Sunday
4      Monday
Name: Dates, dtype: object

Und wenn wir die ganzzahlige Zahl des Wochentags aus dieser Datumsspalte wollen, können wir verwenden:

pdExampleDataFrame.head(5)['Dates'].apply(lambda x: x.weekday())

Die Ausgabe sieht folgendermaßen aus:

0    3
1    4
2    5
3    6
4    0
Name: Dates, dtype: int64
2
Yogesh

Um Sonntag von 1 bis Samstag bis 7 zu erhalten, ist dies die einfachste Lösung für Ihre Frage:

datetime.date.today().toordinal()%7 + 1

Alle von ihnen:

import datetime

today = datetime.date.today()
sunday = today - datetime.timedelta(today.weekday()+1)

for i in range(7):
    tmp_date = sunday + datetime.timedelta(i)
    print tmp_date.toordinal()%7 + 1, '==', tmp_date.strftime('%A')

Ausgabe:

1 == Sunday
2 == Monday
3 == Tuesday
4 == Wednesday
5 == Thursday
6 == Friday
7 == Saturday
2
ox.

so konvertieren Sie eine Liste mit Datumsangaben

import datetime,time
ls={'1/1/2007','1/2/2017'}
dt=datetime.datetime.strptime(ls[1], "%m/%d/%Y")
print(dt)
print(dt.month)
print(dt.year)
2

Hier ist meine Python3-Implementierung. 

months = {'jan' : 1, 'feb' : 4, 'mar' : 4, 'apr':0, 'may':2, 'jun':5, 'jul':6, 'aug':3, 'sep':6, 'oct':1, 'nov':4, 'dec':6}
dates = {'Sunday':1, 'Monday':2, 'Tuesday':3, 'Wednesday':4, 'Thursday':5, 'Friday':6, 'Saterday':0}
ranges = {'1800-1899':2, '1900-1999':0, '2000-2099':6, '2100-2199':4, '2200-2299':2}

def getValue(val, dic):
    if(len(val)==4):
        for k,v in dic.items():
            x,y=int(k.split('-')[0]),int(k.split('-')[1])
            val = int(val)
            if(val>=x and val<=y):
                return v
    else:
        return dic[val]

def getDate(val):
    return (list(dates.keys())[list(dates.values()).index(val)]) 



def main(myDate):
    dateArray = myDate.split('-')
    # print(dateArray)
    date,month,year = dateArray[2],dateArray[1],dateArray[0]
    # print(date,month,year)

    date = int(date)
    month_v = getValue(month, months)
    year_2 = int(year[2:])
    div = year_2//4
    year_v = getValue(year, ranges)
    sumAll = date+month_v+year_2+div+year_v
    val = (sumAll)%7
    str_date = getDate(val)

    print('{} is a {}.'.format(myDate, str_date))

if __== "__main__":
    testDate = '2018-mar-4'
    main(testDate)
1
Lasith Niroshan

Canlendar-Modul verwenden

import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
1
Ravi Bhushan

Angenommen, Sie haben timeStamp: String-Variable, JJJJ-MM-TT HH: MM: SS

Schritt 1 : konvertiere es in die dateTime-Funktion mit Blow-Code ...

df['timeStamp'] = pd.to_datetime(df['timeStamp'])

Schritt 2 : Jetzt können Sie alle erforderlichen Features wie unten extrahieren, wodurch eine neue Spalte für jede Spielzeit, Monat, Wochentag, Jahr und Datum erstellt wird

df['Hour'] = df['timeStamp'].apply(lambda time: time.hour)
df['Month'] = df['timeStamp'].apply(lambda time: time.month)
df['Day of Week'] = df['timeStamp'].apply(lambda time: time.dayofweek)
df['Year'] = df['timeStamp'].apply(lambda t: t.year)
df['Date'] = df['timeStamp'].apply(lambda t: t.day)
1
Shiva_Achari
import datetime
int(datetime.datetime.today().strftime('%w'))+1

dies sollte dir deine reale Tagesnummer geben - 1 = Sonntag, 2 = Montag, etc ...

0
neoghost
import datetime
import calendar

day, month, year = map(int, input().split())
my_date = datetime.date(year, month, day)
print(calendar.day_name[my_date.weekday()])

Ausgabe Sample

08 05 2015
Friday
0

Wenn Sie Daten als Zeichenfolge haben, ist es möglicherweise einfacher, dies mit dem Zeitstempel von pandas zu tun

import pandas as pd
df = pd.Timestamp("2019-04-12")
print(df.dayofweek, df.weekday_name)

Ausgabe:

4 Friday
0
Vlad Bezden