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.
>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday() # what I look for
Die Ausgabe ist vielleicht 6
(seit Freitag)
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.
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'
Verwenden Sie date.weekday()
oder date.isoweekday()
.
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")
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
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]
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.
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)
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
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)]
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
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
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)
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)
Canlendar-Modul verwenden
import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
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)
import datetime
int(datetime.datetime.today().strftime('%w'))+1
dies sollte dir deine reale Tagesnummer geben - 1 = Sonntag, 2 = Montag, etc ...
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()])
08 05 2015
Friday
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