সপ্তাহের দিনটি কীভাবে দেওয়া যায়?


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
ক্যালেন্ডার গণিত সাধারণত সফল হয় কারণ কম্পিউটারগুলি জানে না পিটিও কী। তাদের শেখানো এড়ানোর প্রয়াসে আমি অত্যন্ত কার্যকরীভাবে বাধা দেয় যা এটি নির্ধারণ করে যে এটি বর্তমানে ছুটি বা সাপ্তাহিক ছুটির দিন কিনা।
meawoppl

11
সম্ভবত কারণ ওপি "উদাহরণস্বরূপ", "কিছু" এবং "সম্ভবত" বলেছে।
ইউজিন

10
আপনি যদি চান রবিবার দিন 0:int(datetime.datetime.today().strftime('%w'))
mrooney

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

আমাদের অক্স / 400 এর পরিবর্তে অক্স + 100/400 করার দরকার কেন আপনি দয়া করে ব্যাখ্যা করতে পারেন
হিমানসু 219

পাইথন 3: উপরের ফাংশনে কেবল '//' দিয়ে সমস্ত '/' পরিবর্তন করুন এবং এটি কবজির মতো কাজ করবে।
চব্বির

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)

ডেএল অ্যারে ব্যবহার করার দরকার নেই কারণ আপনি সরাসরি এর strftime("%A")পরিবর্তে দিনের নামটি পেতে পারেনweekday()
লেকের ০১

5

বলুন আপনার টাইমস্ট্যাম্প রয়েছে: স্ট্রিং ভেরিয়েবল, ওয়াইওয়াই-এমএম-ডিডি এইচ এইচ এম: এসএস

পদক্ষেপ 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 সালে ঘটেছিল বলে মনে করা হয় your এটি যদি আপনার আগ্রহের ক্যালেন্ডারের ক্ষেত্রে সত্য না হয় তবে বছর> 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'

পান্ডাস ডেটা ফ্রেমে যদি তারিখের কলাম থাকে তবে:

এখন ধরুন আপনার কাছে যদি কোনও পান্ডাস ডেটাফ্রেম থাকে যেমন একটি তারিখের কলাম রয়েছে: পিডিএক্সেমাল ডেটা ফ্রেম ['তারিখ']। হেড (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? এটি সাধারণ ধারণা যে অজগরটিতে সাপ্তাহিক সংখ্যাটি সূর্যাদে 0 এবং সোমবার 1 হিসাবে শুরু হয়
নেবুলোসার

2

রবিবারকে শনিবার থেকে শনিবার পর্যন্ত 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

প্রশ্নটি রবিবার == 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

ক্যানেলেন্ডার মডিউল ব্যবহার করা হচ্ছে

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

1

আমার পাইথন 3 বাস্তবায়ন এখানে।

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

এনপি হিসাবে নাম্বার আমদানি করুন

Def তারিখ (df):

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.