টাইমডেল্টাকে মোট সেকেন্ডে রূপান্তর করুন


185

আমার একটি সময়ের পার্থক্য আছে

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

এখন, আমি কীভাবে সেকেন্ডের মোট সংখ্যাটি খুঁজে পাব? diff.secondsদিন গণনা করা হয় না। আমি কাজ করতে পারে:

diff.seconds + diff.days * 24 * 3600

এর জন্য কি বিল্টিন পদ্ধতি আছে?


8
@ রিস্টরিসিকো - আপনি ঠিক বলেছেন। তবুও, স্ট্যাক ওভারফ্লোতে প্রশ্নটি রাখা দরকারী, সুতরাং পরের বার আমি বা অন্য কেউ গুগলস এর জন্য, শীর্ষ ফলাফল হিসাবে তার ভাল উত্তর রয়েছে।
ripper234

আমরা পরে "ভাল" এর বিকল্প সংজ্ঞা আলোচনা করতে পারি; আপনি পালানোর আগে দয়া করে আমার উত্তরটি পড়ুন :)
জন মাচিন

কম্পিউটিং time1এবং diffআপনার কোডে একাধিক সমস্যা রয়েছে । একটি নিষ্কলুষ ডেটটাইম অবজেক্ট হিসাবে বর্তমান utc সময় পেতে, datetime.utcnow()পরিবর্তে ব্যবহার করুন স্থানীয় সময়টির পরিবর্তে আপনার কেন ইউটিসি ব্যবহার করা উচিত তা বুঝতে পার্থক্যটি সন্ধানের জন্য 24 ঘন্টা তারিখের সময়গুলি - পাইথনের মধ্যে পাস করেছে কিনা তা দেখুন । time.monotonic()ইভেন্টগুলির মধ্যে ( time.time()বা পরিবর্তে datetime.utcnow()) এর মধ্যে অতিবাহিত সময় পাওয়া ভাল fe
jfs

উত্তর:


382

ব্যবহার timedelta.total_seconds()

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

26
অজগর 2.7 এ নতুন
এভেজেনি

7
যদি কারও এখনও ২.6 এর সাথে সামঞ্জস্য করা প্রয়োজন: নিজেকে নতুন পদ্ধতির সাথে ডেটটাইম.টিমেডেলটা কীভাবে বাড়ানো যায় তার জন্য স্ট্যাকওভারফ্লো / প্রশ্ন / 3318348 /… দেখুন ।
উওয়ে গিউডার

6
ডেটটাইম.টিমেডেলটা.টোটাল_সেকেন্ডস (টাইম 2-টাইম 1) পাইথন 3.6 এ
রুসো

8

আপনার একরকম বা অন্যটি নিয়ে সমস্যা রয়েছে datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) মত প্রকাশের ।

(1) আপনার যা যা প্রয়োজন তা হ'ল সেকেন্ডে দুটি তাত্ক্ষণিকের মধ্যে পার্থক্য, খুব সহজ time.time()কাজটি করে।

(২) আপনি যদি অন্য উদ্দেশ্যে এই টাইমস্ট্যাম্পগুলি ব্যবহার করে থাকেন তবে আপনি কী করছেন তা আপনার বিবেচনা করা উচিত, কারণ ফলাফলটির চারদিকে প্রচুর গন্ধ রয়েছে:

gmtime()ইউটিসিতে একটি সময় দ্বিগুণ ফিরিয়ে দেয় তবে স্থানীয় সময়mktime() একটি সময় দ্বিগুণ আশা করে

আমি অস্ট্রেলিয়ার মেলবোর্নে যেখানে স্ট্যান্ডার্ড টিজেডটি ইউটিসি +১০, তবে দিবালোক সংরক্ষণটি আগামীকাল সকাল পর্যন্ত কার্যকর রয়েছে তাই এটি ইউটিসি +১১ 11 আমি যখন নিম্নলিখিতটি সম্পাদন করেছি, এটি ছিল 2011-04-02T20: 31 স্থানীয় সময় এখানে ... ইউটিসি ছিল 2011-04-02T09: 31

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

আপনি দেখতে পাবেন যে টি 3, আপনার অভিব্যক্তিটির ফলাফলটি ইউটিসি + 1, যা ইউটিসি + (আমার স্থানীয় ডিএসটি পার্থক্য) হিসাবে উপস্থিত হয় ... খুব অর্থবহ নয়। আপনার datetime.datetime.utcnow()যখন ডিএসটি চালু / বন্ধ হয় তখন এক ঘন্টারও বেশি লাফিয়ে না পড়ে এমনটি ব্যবহার করার কথা বিবেচনা করা উচিত এবং আপনাকে এর চেয়ে আরও নির্ভুলতা দিতে পারেtime.time()


স্পষ্টতার জন্য ধন্যবাদ। আমি এখনই যে উদ্দেশ্যে ব্যবহার করছি তার জন্য, প্রতি কয়েক ঘন্টা এমনকি তার পরেও কয়েক ঘন্টা পার্থক্য গুরুত্বপূর্ণ নয়, তবে আমি যখন ভবিষ্যতে আরও অর্থবহ কিছু লিখব তখন আমি অবশ্যই এটি পরীক্ষা করে দেখব।
রিপার 234

-7

আপনি mx.DateTime মডিউলটি ব্যবহার করতে পারেন

import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.