मुझे सप्ताह के दिन की तारीख कैसे दी जाती है?


589

मैं निम्नलिखित का पता लगाना चाहता हूं: दी गई तारीख ( datetimeवस्तु), सप्ताह का संबंधित दिन क्या है?

उदाहरण के लिए, रविवार पहला दिन है, सोमवार: दूसरा दिन .. और इसी तरह

और फिर अगर इनपुट आज की तारीख जैसा कुछ है।

उदाहरण

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

उत्पादन शायद है 6(चूंकि यह शुक्रवार है)

जवाबों:


936

उपयोग weekday()( डॉक्स ):

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

प्रलेखन से:

सप्ताह के दिन को पूर्णांक के रूप में लौटाएं, जहां सोमवार 0 है और रविवार 6 है।


342
एक महत्वपूर्ण बात यह है कि जावास्क्रिप्ट 0 = रविवार में, पायथन की शुरुआत 0 = सोमवार से होती है। कुछ ऐसा है कि मैं भाग गया, सामने के अंत बनाम बैक-एंड ..
रेडटेक

4
कैलेंडर गणित आम तौर पर बेकार है क्योंकि कंप्यूटर नहीं जानते कि पीटीओ क्या है। उन्हें पढ़ाने से बचने के प्रयास में, मैं अत्यधिक रूप से उन कार्यों को करने की सलाह देता हूं जो यह निर्धारित करते हैं कि यह वर्तमान में अवकाश है या सप्ताहांत।
मेवोप्लप

11
शायद इसलिए क्योंकि ओपी कहता है "उदाहरण के लिए", "कुछ ऐसा" और "शायद"।
यूजीन

10
यदि आप रविवार को दिन के रूप में 0 चाहते हैं:int(datetime.datetime.today().strftime('%w'))
मैरोनी

19
1 से शुरू करने के लिए, हम कार्यदिवस के स्थान पर आईवॉकडे का उपयोग कर सकते हैं; 1 = सोमवार
अमन कुमार

287

यदि आप अंग्रेजी में तारीख रखना चाहते हैं:

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

1
यह एक अंग्रेजी, दिन के सप्ताह की तारीख उत्पन्न करने के लिए सबसे अच्छा जवाब लगता है। मैं यह अनुमान लगा रहा हूं कि यह अधिक सरल नहीं है क्योंकि उत्तर ~ 1 महीने पुराना है, जबकि प्रश्न ~ 3 साल पुराना है।
जॉनी उटाह

20
मुझे लगता है कि यह सिर्फ करने के लिए और अधिक प्रभावी हैmy_date.strftime('%A')
नाथन तेव

इसने मेरा दिन बचाया
अमोल बैस


45

का प्रयोग करें date.weekday()या date.isoweekday()


7
क्योंकि किसी datetimeऑब्जेक्ट के संबंध में पूछे जाने वाले ऑप ( एक वस्तु नहीं date) के बारे में मैं यह उल्लेख करना चाहूंगा कि datetimeक्लास एक ही खेल weekday()और isoweekday()तरीके।
जेन्स


27

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

कारण है कि हम aux + 100/400 के बजाय aux / 400 करने की जरूरत है आप कृपया समझा सकते हैं
himanshu219

python3: उपरोक्त फ़ंक्शन में बस '' / 'के साथ सभी' / 'बदलें और यह एक आकर्षण की तरह काम करेगा।
15

11

यह एक समाधान है यदि दिनांक एक डेटाइम ऑब्जेक्ट है।

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

10

यदि आपके पास तार के रूप में तारीखें हैं, तो पांडा के टाइमस्टैम्प का उपयोग करके इसे करना आसान हो सकता है

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

आउटपुट:

4 Friday

8

डेटाइम लाइब्रेरी कभी-कभी स्ट्रैपटाइम () के साथ त्रुटियां देती है, इसलिए मैंने डेट्यूटिल लाइब्रेरी पर स्विच किया। आप इसका उपयोग कैसे कर सकते हैं, इसका एक उदाहरण यहां दिया गया है:

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

इससे आपको जो आउटपुट मिलता है 'Mon'। यदि आप आउटपुट को 'सोमवार' के रूप में चाहते हैं, तो निम्न का उपयोग करें:

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

यह मेरे लिए बहुत जल्दी काम करता है। मुझे डेटटाइम लाइब्रेरी का उपयोग करते समय समस्या हो रही थी क्योंकि मैं कार्यदिवस के नाम को कार्यदिवस नंबर के बजाय स्टोर करना चाहता था और डेटाटाइम लाइब्रेरी का उपयोग करने से प्रारूप समस्या पैदा कर रहा था। यदि आप इस के साथ समस्या नहीं कर रहे हैं, महान! यदि आप हैं, तो आप इसके लिए सरलता से जाते हैं क्योंकि इसमें एक सरल वाक्यविन्यास है। उम्मीद है की यह मदद करेगा।


6

यह मानते हुए कि आपको दिन, महीने और साल दिए जा सकते हैं:

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)

Dayl सरणी का उपयोग कर के रूप में आप सीधे का उपयोग करके दिन नाम प्राप्त कर सकते हैं की कोई जरूरत नहीं है strftime("%A")के बजायweekday()
Lekr0

5

मान लें कि आपके पास टाइमस्टैम्प है: स्ट्रिंग चर, YYYY-MM-DD HH: MM: SS

चरण 1 : इसे ब्लो कोड के साथ डेटटाइम फ़ंक्शन में बदलें ...

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)

4

यदि आपके पास डेटाइम मॉड्यूल के उपयोग से बचने का कारण है, तो यह फ़ंक्शन काम करेगा।

नोट: जूलियन से ग्रेगोरियन कैलेंडर में परिवर्तन 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

1
प्रयास के लिए 'ए'! आप अनावश्यक संगणना को रोकने के लिए, सशर्त के अंदर fgऔर उन लोगों को, जैसे वक्तव्य दे सकते हैं fj
टॉम रसेल

4

यदि आप datetimeमॉड्यूल पर पूरी तरह निर्भर नहीं हैं , तो calendarबेहतर विकल्प हो सकता है। यह, उदाहरण के लिए, आपको दिन कोड प्रदान करेगा:

calendar.weekday(2017,12,22);

और यह आपको खुद ही दिन देगा:

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

या एक लाइनर के रूप में अजगर की शैली में:

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

3

हम पंडों की मदद ले सकते हैं:

import pandas as pd

जैसा कि समस्या में ऊपर बताया गया है:

datetime(2017, 10, 20)

अगर इस लाइन को ज्यूपिटर नोटबुक में निष्पादित किया जाए तो हमारे पास इस तरह एक आउटपुट है:

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'

यदि पंडों के डेटाफ्रेम में एक तारीख स्तंभ है:

अब मान लें कि आपके पास एक पंडों का डेटाफ्रेम है जिसमें इस तरह की तारीख वाला कॉलम है: pdExampleDataFrame ['डेट्स']। हेड (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]

अब यदि हम सोमवार, मंगलवार जैसे कार्यदिवस का नाम जानना चाहते हैं, तो .. हम .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

3
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
import datetime
int(datetime.datetime.today().strftime('%w'))+1

यह आपको अपना वास्तविक दिन नंबर देना चाहिए - 1 = रविवार, 2 = सोमवार, आदि ...


आप क्यों इस्तेमाल करेंगे +1? यह आम बात है कि अजगर में सप्ताह के अंत में sundat 0 से शुरू होता है और 1. के रूप में सोमवार को
Nebulosar

2

शनिवार को 7 के रूप में 1 के रूप में रविवार प्राप्त करने के लिए, यह आपके प्रश्न का सबसे सरल समाधान है:

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

सवाल रविवार == 1, सोमवार == 2, और शुक्रवार == 6.
बैल के

2

यहाँ है कि कैसे एक सूची की तारीखों को दिनांक में परिवर्तित करें

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)

1

Canlendar मॉड्यूल का उपयोग करना

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

1

यहाँ मेरा 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)


-1

आयात एनपीपी के रूप में सुन्न

डीईएफ तारीख (डीएफ):

df['weekday'] = df['date'].dt.day_name()

conditions = [(df['weekday'] == 'Sunday'),
          (df['weekday'] == 'Monday'),
          (df['weekday'] == 'Tuesday'),
          (df['weekday'] == 'Wednesday'),
          (df['weekday'] == 'Thursday'),
          (df['weekday'] == 'Friday'),
          (df['weekday'] == 'Saturday')]

choices = [0, 1, 2, 3, 4, 5, 6]

df['week'] = np.select(conditions, choices)

return df
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.