916 Stimmen

Wie kann ich den Wochentag eines Datums ermitteln?

Ich möchte Folgendes herausfinden: Angesichts eines Datums ( datetime Objekt), was ist der entsprechende Wochentag?

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

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

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

Die Ausgabe ist vielleicht 6 (da heute Freitag ist)

10voto

Shiv948 Punkte 429

Sagen wir, Sie haben Zeitstempel: String-Variable, JJJJ-MM-TT HH:MM:SS

Stufe 1 : Konvertieren in dateTime Funktion mit Blow Code...

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

Schritt 2 : Jetzt können Sie alle erforderlichen Merkmale wie unten dargestellt extrahieren, wodurch eine neue Spalte für jedes der Merkmale - Stunde, Monat, Wochentag, Jahr, 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)

8voto

seunggabi Punkte 1430

Dies muss nicht mit dem Wochentag kommentiert werden.
Ich empfehle diesen Code~!

import datetime

DAY_OF_WEEK = {
    "MONDAY": 0,
    "TUESDAY": 1,
    "WEDNESDAY": 2,
    "THURSDAY": 3,
    "FRIDAY": 4,
    "SATURDAY": 5,
    "SUNDAY": 6
}

def string_to_date(dt, format='%Y%m%d'):
    return datetime.datetime.strptime(dt, format)

def date_to_string(date, format='%Y%m%d'):
    return datetime.datetime.strftime(date, format)

def day_of_week(dt):
    return string_to_date(dt).weekday()

dt = '20210101'
if day_of_week(dt) == DAY_OF_WEEK['SUNDAY']:
    None

7voto

mathwizurd Punkte 1257

Wenn Sie den Tag, den Monat und das Jahr wissen, können Sie das 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)

6voto

Barry Andersen Punkte 427

Wenn Sie die Verwendung des datetime-Moduls vermeiden wollen, ist diese Funktion geeignet.

Hinweis: Es wird angenommen, dass der Wechsel vom Julianischen zum Gregorianischen Kalender im Jahr 1582 stattgefunden hat. Wenn dies für den Sie interessierenden Kalender nicht zutrifft, ändern Sie die Zeile wenn Jahr > 1582: entsprechend.

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

5voto

AnaCronIsm Punkte 51

Wenn Sie nicht ausschließlich auf das Internet angewiesen sind datetime Modul, calendar könnte eine bessere Alternative sein. So erhalten Sie zum Beispiel die Tagescodes:

calendar.weekday(2017,12,22);

Und dies wird Ihnen den Tag selbst geben:

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

Oder in Anlehnung an Python, als One-Liner:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X