Как мне получить день недели с учетом даты в Python? - PullRequest
462 голосов
/ 24 марта 2012

Я хочу узнать следующее: учитывая дату (datetime объект), каков соответствующий день недели.

Например, воскресенье - первый день, понедельник: второй день ... и т. Д.

И затем, если ввод будет похож на сегодняшнюю дату.

Пример

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

Вывод может быть 6 (с пятницы)

Ответы [ 20 ]

4 голосов
/ 11 мая 2015

Если у вас есть основания избегать использования модуля datetime, то эта функция будет работать.

Примечание. Предполагается, что переход от юлианского к григорианскому календарю произошел в 1582 году. Если это не так для интересующего вас календаря, измените строку , если год> 1582: соответственно.

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
3 голосов
/ 03 февраля 2019
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
3 голосов
/ 20 февраля 2019

Скажем, у вас есть timeStamp: строковая переменная, ГГГГ-ММ-ДД ЧЧ: ММ: СС

шаг 1 : преобразовать его в функцию dateTime с кодом удара ...

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

Шаг 2 : теперь вы можете извлечь все требуемые функции, как показано ниже, которые создадут новый столбец для каждого из следующих часов, месяцев, дней недели, года и даты

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)
2 голосов
/ 09 мая 2014

Чтобы получить воскресенье с 1 по субботу как 7, это самое простое решение вашего вопроса:

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

Все они:

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')

Вывод:

1 == Sunday
2 == Monday
3 == Tuesday
4 == Wednesday
5 == Thursday
6 == Friday
7 == Saturday
2 голосов
/ 23 января 2019

Мы можем воспользоваться помощью Панд:

import pandas as pd

Как упоминалось выше в задаче, у нас есть:

datetime(2017, 10, 20)

Если выполнить эту строку в jupyterВ блокноте у нас есть вывод наподобие этого:

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

Использование дня недели () и имени дня недели:

Если вы хотите, чтобы дни недели были в формате целых чисел, используйте:

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

Вывод будет:

4

И если вы хотите использовать его в качестве названия дня, такого как воскресенье, понедельник, пятница и т. Д., Вы можете использовать:

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

Вывод будет:

'Friday'

Если в столбце данных Pandas имеется столбец дат, то:

Теперь предположим, что у вас есть пандафрейм данных, имеющий столбец даты, подобный следующему: 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]

Now Если мы хотим узнать название дня недели, например понедельник, вторник и т. д., мы можем использовать.weekday_name следующим образом:

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

вывод будет:

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

И если мы хотим получить целое число дня недели из этого столбца Даты, то мы можем использовать:

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

Вывод будет выглядеть так:

0    3
1    4
2    5
3    6
4    0
Name: Dates, dtype: int64
2 голосов
/ 10 июля 2017

вот как конвертировать список дат в дату

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 голосов
/ 12 апреля 2019

Если у вас есть даты в виде строки, это может быть проще сделать, используя pandas 'Timestamp

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

Выход:

4 Friday
1 голос
/ 21 февраля 2018

Использование модуля Canlendar

import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
1 голос
/ 04 марта 2018

Вот моя реализация на python3.

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 __name__ == "__main__":
    testDate = '2018-mar-4'
    main(testDate)
0 голосов
/ 20 мая 2019
import datetime
int(datetime.datetime.today().strftime('%w'))+1

это должно дать вам ваш номер реального дня - 1 = воскресенье, 2 = понедельник и т. Д ...

...