কিভাবে একটি তারিখ থেকে একটি দিন বিয়োগ?


উত্তর:


1288

আপনি একটি টাইমডেল্টা অবজেক্ট ব্যবহার করতে পারেন :

from datetime import datetime, timedelta

d = datetime.today() - timedelta(days=days_to_subtract)

14
আপনি যদি সময় অঞ্চলগুলি উপেক্ষা না করেন তবে উত্তরটি আরও জটিল
jfs

এছাড়াও, আপনি কীভাবে এটি একটি নির্দিষ্ট তারিখের সাথে সম্পর্কিত করেন। আমার প্রশ্ন দেখুন: stackoverflow.com/questions/43092508/...
JohnAndrews

7
অজগর 3 তে কেবল: আমদানির তারিখের সময় এবং তারপরে d = ডেটটাইম.টোডে () - ডেটটাইম.টিমেডেলটা (দিন = দিন_তো_সুব্র্যাক্ট)
অ্যালেক্স

এটি অন্যান্য ইউনিটগুলির সাথেও কাজ করে, আমি timedelta(minutes=12)উদাহরণ সহ এটি ব্যবহার করেছি ।
নাগেভ

@ লিগালিয়েন: আপনার আমদানির বিবৃতিগুলি দেখুন: import datetime as DT; DT.datetime.today()পাইথন 2 এবং 3 উভয় ক্ষেত্রেই এটি সমান DT.datetime.now()
jfs


62

আপনার পাইথনের ডেটটাইম অবজেক্টটি যদি সময়-জাগ্রত হয় তবে ডিএসটি ট্রানজিশনের (বা অন্যান্য কারণে ইউটিসি অফসেটে পরিবর্তনগুলি) এড়াতে আপনার ত্রুটি এড়াতে সতর্ক হওয়া উচিত:

from datetime import datetime, timedelta
from tzlocal import get_localzone # pip install tzlocal

DAY = timedelta(1)
local_tz = get_localzone()   # get local timezone
now = datetime.now(local_tz) # get timezone-aware datetime object
day_ago = local_tz.normalize(now - DAY) # exactly 24 hours ago, time may differ
naive = now.replace(tzinfo=None) - DAY # same time
yesterday = local_tz.localize(naive, is_dst=None) # but elapsed hours may differ

স্থানীয় সময়কালের জন্য ইউটিসি অফসেটটি গত দিনে পরিবর্তিত হয়ে থাকলে day_agoএবং সাধারণভাবে yesterdayপৃথক হতে পারে।

উদাহরণস্বরূপ, দিবালোক সংরক্ষণের সময় / গ্রীষ্মের সময় সান 2-নভেম্বর-2014 এ আমেরিকাতে / লস_এঞ্জেলস টাইমজোন এ শেষ হয় তাই যদি:

import pytz # pip install pytz

local_tz = pytz.timezone('America/Los_Angeles')
now = local_tz.localize(datetime(2014, 11, 2, 10), is_dst=None)
# 2014-11-02 10:00:00 PST-0800

তারপরে day_agoএবং yesterdayপৃথক:

  • day_agoঠিক ২৪ ঘন্টা আগে (তুলনামূলক now) তবে সকাল ১১ টায়, সকাল দশটায় নয়now
  • yesterdayগতকাল সকাল 10 টায় তবে এটি 25 ঘন্টা আগে (তুলনামূলক now) 24 ঘন্টা নয়।

pendulumমডিউল এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে:

>>> import pendulum  # $ pip install pendulum

>>> now = pendulum.create(2014, 11, 2, 10, tz='America/Los_Angeles')
>>> day_ago = now.subtract(hours=24)  # exactly 24 hours ago
>>> yesterday = now.subtract(days=1)  # yesterday at 10 am but it is 25 hours ago

>>> (now - day_ago).in_hours()
24
>>> (now - yesterday).in_hours()
25

>>> now
<Pendulum [2014-11-02T10:00:00-08:00]>
>>> day_ago
<Pendulum [2014-11-01T11:00:00-07:00]>
>>> yesterday
<Pendulum [2014-11-01T10:00:00-07:00]>

41

কেবলমাত্র একটি বিকল্প পদ্ধতি এবং একটি ব্যবহারের কেসটি যার জন্য এটি সহায়ক তা ব্যাখ্যা করার জন্য:

  • বর্তমান তারিখের সময় থেকে 1 দিন বিয়োগ করুন:
from datetime import datetime, timedelta
print datetime.now() + timedelta(days=-1)  # Here, I am adding a negative timedelta
  • ক্ষেত্রে কার্যকর , আপনি যদি 5 দিন যোগ করতে চান এবং বর্তমান তারিখের সময় থেকে 5 ঘন্টা বিয়োগ করতে চান। অর্থাত্ এখন থেকে ২ দিন তবে 5 ঘন্টা কম ডেটটাইম কী?
from datetime import datetime, timedelta
print datetime.now() + timedelta(days=5, hours=-5)

এটি একইভাবে অন্যান্য পরামিতি যেমন সেকেন্ড, সপ্তাহ ইত্যাদির সাথে ব্যবহার করা যেতে পারে


8

এছাড়াও আমি অন্য একটি সুন্দর ফাংশনটি ব্যবহার করতে চাই যখন আমি গণনা করতে চাই যখন গত মাসের প্রথম / শেষ দিন বা অন্যান্য আপেক্ষিক টাইমডেল্টাস ইত্যাদি ...

ডেটুটিল ফাংশন থেকে আপেক্ষিক ডেল্টা ফাংশন ( ডেটটাইম লিবের একটি শক্তিশালী এক্সটেনশন)

import datetime as dt
from dateutil.relativedelta import relativedelta
#get first and last day of this and last month)
today = dt.date.today()
first_day_this_month = dt.date(day=1, month=today.month, year=today.year)
last_day_last_month = first_day_this_month - relativedelta(days=1)
print (first_day_this_month, last_day_last_month)

>2015-03-01 2015-02-28

7

জেনিয়াল তীর মডিউল বিদ্যমান

import arrow
utc = arrow.utcnow()
utc_yesterday = utc.shift(days=-1)
print(utc, '\n', utc_yesterday)

আউটপুট:

2017-04-06T11:17:34.431397+00:00 
 2017-04-05T11:17:34.431397+00:00
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.