পাইথনের সময়.টাইম () কি স্থানীয় বা ইউটিসি টাইমস্ট্যাম্পটি ফেরত দেয়?


558

time.time()পাইথন টাইম মডিউলটিতে কি সিস্টেমের সময় বা ইউটিসির সময়টি ফিরে আসে?


87
টাইমস্ট্যাম্পগুলিতে টাইমজোন নেই। তারা যুগে যুগে কয়েক সেকেন্ডের প্রতিনিধিত্ব করে। যুগটি একটি নির্দিষ্ট মুহূর্ত যা সময় অঞ্চলের উপর নির্ভর করে না।
jwg

2
@jwg: সাধারণভাবে ব্যবহৃত পসিক্স টাইমস্ট্যাম্পগুলি লিপ সেকেন্ড গণনা করে না এবং এ কারণেই তারা "মহাব্যবস্থার পর থেকে" [অতিবাহিত এসআই] সেকেন্ডের সংখ্যা নয় "(তারা কাছে রয়েছে)।
jfs

7
আমি মনে করি এটি @ জেএফএসবেস্টিয়ানের একটি সঠিক আপত্তি। লিপ সেকেন্ড 'যুগের পর থেকে বিগত সেকেন্ড' নয়। এগুলি হ'ল ঘড়ি দ্বারা রেকর্ড করা সময়ের উপস্থাপনাগুলিতে পরিবর্তন যা বিচ্ছিন্ন সেকেন্ডের সাথে মিল নয়।
jwg

4
@ JFSebastian বিভ্রান্তির জন্য দুঃখিত। লিপ সেকেন্ড 'বিচ্ছিন্ন সেকেন্ড' নয়। অতএব টাইমস্ট্যাম্পগুলি, যা 'অতিবাহিত সেকেন্ডের সংখ্যা', লিপ সেকেন্ড অন্তর্ভুক্ত করে না এবং করা উচিত নয়।
jwg

2
@jwg ভুল আপনি শারীরিক সময় মুছতে পারবেন না। পসিক্স টাইমস্ট্যাম্পটি কাটিয়ে যাওয়া এসআই সেকেন্ডের সংখ্যা নয়। এখানে একটি উদাহরণ রয়েছে: নিউইয়র্কের "31 ডিসেম্বর, 2016 সন্ধ্যা 6:59:59 এ" এবং "31 ডিসেম্বর, ২০১ 2016 সন্ধ্যা :00:০:01 এ" এর মধ্যে 3 সেকেন্ড অতিক্রান্ত হয়েছে তবে সংশ্লিষ্ট পসিক্স টাইমস্ট্যাম্পগুলির মধ্যে পার্থক্য মাত্র 2 সেকেন্ড ( লিপ সেকেন্ড গণনা করা হয় না)।
jfs

উত্তর:


779

time.time()ফাংশন, কাল থেকে সেকেন্ডের সংখ্যা ফেরৎ সেকেন্ড হিসাবে। নোট করুন যে "যুগে যুগে" ইউটিসিতে ১ লা জানুয়ারি, 1970 এর সূচনা হিসাবে সংজ্ঞায়িত করা হয়। সুতরাং যুগে যুগে ইউটিসির শর্তাবলী সংজ্ঞায়িত করা হয় এবং সময়মতো একটি বিশ্ব মুহুর্ত প্রতিষ্ঠিত করে। আপনি যেখানে "সেকেন্ডের অতীতকাল" (টাইম.টাইম ()) একই মুহূর্তে একই মান ফেরত দেয় না matter

এখানে কিছু নমুনা আউটপুট আমি আমার কম্পিউটারে দৌড়েছি, এটিকে স্ট্রিংয়ে রূপান্তরিত করেছি।

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

tsপরিবর্তনশীল সময় সেকেন্ডের মধ্যে ফিরে আসেন। আমি তখন এটি datetimeলাইব্রেরি ব্যবহার করে একটি স্ট্রিংয়ে রূপান্তরিত করে এটি স্ট্রিং তৈরি করে যা মানব পাঠযোগ্য।


72
import timeডেটটাইম যখন মূলত আপনাকে টাইমস্ট্যাম্প দেয় তখন আমাদের কেন উচিত । শুধু মিলি সেকেন্ড সরিয়ে ফেলুন -str(datetime.datetime.now()).split('.')[0]
হুসেন

17
@ অ্যালেক্সিস ইউনিক্সের যুগটি এখানে খুব স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে । এটি পৃষ্ঠার নীচে একটি পাইথনের উদাহরণও দেখায়। আমি আপনার মন্তব্য বুঝতে পারি না।
স্কিগুই

9
@ স্পুইগুয় সত্য কথা বলতে কি আমাকে কী বলেছে তা মনে নেই। আমার অবশ্যই কিছু ভুল পড়েছিল এবং আমি ফ্রান্স এবং আমেরিকার মধ্যবর্তী স্থানে যাওয়ার সময় কিছু পরীক্ষা কেন ভেঙে ফেলার চেষ্টা চালিয়ে যাচ্ছিলাম তা অবশেষে জানতে পেরেছিলাম যে বিষয়টি ডিএসটি কারণে বছরের এই সময়কালে সপ্তাহকে আরও দীর্ঘায়িত করে। এটি সম্পর্কে দুঃখিত এবং এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
অ্যালেক্সিস

5
এটি "ইউটিসির সেকেন্ডে" নয় প্রদত্ত টাইমস্ট্যাম্পটি time.time()কোনও টাইমজোন নয় । "যুগের পর থেকে সেকেন্ড" একটি শব্দ; কিছু সময় পর্ব থেকে এটি শেষ হয়ে যায় না (secondsগ)) আপনি এটিকে আপনার স্থানীয় সময় (tz ডাটাবেস সহ) এবং / অথবা ইউটিসি টাইমজোন সহজে রূপান্তর করতে পারেন। বিটিডব্লিউ, আপনি যদি .strftime()ফলাফলটি বাদ দেন (প্রায়) একই (+/- মাইক্রোসেকেন্ডস)।
jfs

3
কেবল এটি পরীক্ষা করা হয়েছে, সময়.টাইম () ইউটিসি সময় দেয় না, এটি আমার স্থানীয় অঞ্চলকে সময় দেয়
স্লাইডার_আলফা

301

এটি এমন টাইমস্ট্যাম্পের পাঠ্য ফর্মের জন্য যা আপনার পাঠ্য ফাইলগুলিতে ব্যবহার করা যেতে পারে। (প্রশ্নের শিরোনাম অতীতে পৃথক ছিল, তাই সময়টির ব্যাখ্যা কীভাবে করা যেতে পারে তা স্পষ্ট করে এই উত্তরের ভূমিকা পরিবর্তন করা হয়েছিল। [আপডেট করা হয়েছে 2016-01-14])

আপনি .now()বা .utcnow()এর ব্যবহার করে স্ট্রিং হিসাবে টাইমস্ট্যাম্প পেতে পারেন datetime.datetime:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000

nowপৃথক থেকে utcnowআশানুরূপ - অন্যথায় তারা একই ভাবে কাজ করে:

>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000

আপনি স্ট্রিংয়ের স্পষ্টভাবে টাইমস্ট্যাম্প রেন্ডার করতে পারেন:

>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'

অথবা আপনার পছন্দ মতো টাইমস্ট্যাম্প ফর্ম্যাট করতে আপনি আরও সুস্পষ্ট হতে পারেন:

>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'

আপনি যদি আইএসও ফর্ম্যাট চান .isoformat()তবে অবজেক্টের পদ্ধতিটি ব্যবহার করুন :

>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'

আপনি এইগুলি রূপান্তর ছাড়াই গণনা এবং মুদ্রণের জন্য পরিবর্তনশীলগুলিতে ব্যবহার করতে পারেন।

>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980

1
আমি কাল সময় চেয়েছিলেন .... তারিখ বিন্যাস মধ্যে নেই ... যেমন কমান্ড time.time () আমার স্মরণ থেকে স্পষ্ট ছিল
Saransh মহাপাত্র

34
ঠিক আছে, সমস্যা নেই. অন্য কারও কাছে টেক্সট ফাইল স্থাপনের জন্য টাইমস্ট্যাম্পের প্রয়োজন হতে পারে ।
পিআরপি

1
আমি অন্য একজন, সম্ভাব্য অযৌক্তিক সংখ্যার কারণে এখানে পুনঃনির্দেশিত । প্রশ্নটি ত্রুটিযুক্ত এবং সাধারণ প্রয়োজনের জন্য গৃহীত উত্তরগুলি বিভ্রান্তিমূলক: একটি মানব পাঠযোগ্য প্রত্যয় পেয়ে যাওয়া - ফাইলের নামগুলির জন্য বলুন - সর্বাধিক ব্যবহৃত সার্ভার টাইমজননে।

স্ট্রিংয়ের অংশ হিসাবে একটি টাইমস্ট্যাম্প মুদ্রণ করতে, এটি ব্যবহার করুন: import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()পাইথন 2: পাইথন 3:import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
মিস্টার-আইডিই

datetime.datetime.utcnow()মন্দ। এটি একটি নিষ্পাপ ডেটটাইম তৈরি করে যা স্থানীয় সময় নয়। আপনার স্থানীয় সময়টি ইউটিসি না হলে এটি ভুল হবে। datetime.datetime.now(datetime.timezone.utc)পরিবর্তে ব্যবহার করুন। এটি বর্তমান সময়ের প্রতিনিধিত্ব করে একটি সময় অঞ্চল সচেতন তারিখের সময় তৈরি করে।
টেরেল শুমওয়ে

139

# স্কুইগুয়ের উত্তরের ভিত্তিতে, একটি সত্যিকারের টাইমস্ট্যাম্প পেতে আমি এটি ভাসা থেকে কাস্ট করে টাইপ করব।

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

কমপক্ষে এটি ধারণা।


1
টাইমস্ট্যাম্প টাইপস্টাস্ট করার কারণ কী? ডিফল্ট অনুসারে কী?
তিজজি

3
@ টিজজি type(time.time())দেয়<type 'float'>
বিখ্যাতগারকিন

4
তবে আপনার যদি সেকেন্ডের চেয়ে বেশি সুনির্দিষ্ট সময় প্রয়োজন হয় তবে ভাসাটি বোঝায়।
পিআরপি

3
@ রূডিস্ট্রিডম: পাইথন দৃ strongly়ভাবে টাইপ করা হয়েছে। স্থিরভাবে টাইপ হওয়ার সাথে এটি বিভ্রান্ত করবেন না।
jfs

1
@ চেওকান চেইং: বহুকোষী int()। এটি longপুরানো পাইথন সংস্করণে প্রয়োজনে ফিরে আসবে - সমস্ত পূর্ণসংখ্যার নতুন পাইথন সংস্করণ দীর্ঘ long
jfs

30

উত্তর দুটি বা উভয়ই হতে পারে।

  • উভয়ই: time.time()মহাকাব্যকাল থেকে প্রায় সেকেন্ডের বিস্তৃত পরিমাণ প্রদান করে। ফলাফল সময় অঞ্চলের উপর নির্ভর করে না তাই এটি ইউটিসি বা স্থানীয় সময়ও নয়। "যুগের পর থেকে দ্বিতীয় সেকেন্ড" এর জন্য এখানে পসিক্সের সংজ্ঞা রয়েছে

  • উভয়ই: time.time()আপনার সিস্টেমের ঘড়িটিকে সিঙ্ক্রোনাইজ করার দরকার নেই তাই এটির মানটি প্রতিবিম্বিত হয় (যদিও এটির স্থানীয় টাইমজোনটির সাথে কোনও সম্পর্ক নেই)। একই সাথে বিভিন্ন কম্পিউটার বিভিন্ন ফলাফল পেতে পারে। অন্যদিকে আপনার কম্পিউটারের সময়টি যদি সিঙ্ক্রোনাইজ হয় তবে টাইমস্ট্যাম্প থেকে ইউটিসি সময় পাওয়া সহজ (যদি আমরা লিপ সেকেন্ড উপেক্ষা করি):

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(timestamp)

বিভিন্ন পাইথন সংস্করণে ইউটিসি সময় থেকে টাইমস্ট্যাম্পগুলি কীভাবে পাবেন, দেখুন ইউটিসি অনুসারে পর্বের সময় থেকে আমি কীভাবে সেকেন্ডে রূপান্তর করতে পারি?


4
এই একমাত্র উত্তরটি সঠিকভাবে উল্লেখ করা হচ্ছে datetime.utcfromtimestampযখন উত্তরগুলির সাথে 308 আপভোট রয়েছে datetime.fromtimestamp:-(

@ টেরেলশুমওয়ে প্রশ্নটি time.time()ফাংশনটি কী দেয় তা সম্পর্কে (এটি খুব সংক্ষিপ্ত)। আপনার মন্তব্যটি আরও কিছু প্রশ্নের সমাধান করে (আপনি যেহেতু আমি এর উত্তর দেওয়া শুরু করেছেন আপনি নিজের মন্তব্য পরিবর্তন করেছেন the আরও খারাপের জন্য)। একটি সরু নোট; "সঠিক" শব্দটি অল্প পরিমাণে ব্যবহার করা উচিত (সময় অঞ্চলগুলি জটিল silver কোনও রূপালী বুলেট নেই — কেবল কোনও নির্দিষ্ট ব্যবহারের ক্ষেত্রে ট্রেড অফস)।
jfs

ব্যবহার করবেন না datetime.datetime.utcfromtimestamp(ts)। আপনার স্থানীয় সময়টি ইউটিসি না হলে এটি ভুল হবে, কারণ এটি একটি নির্লজ্জ ডেটটাইম তৈরি করে যা স্থানীয় সময় নয়। datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)পরিবর্তে ব্যবহার করুন। এটি টাইমস্ট্যাম্পের মতো একই তাত্ক্ষণিকের প্রতিনিধিত্ব করে একটি সময় অঞ্চল সচেতন ডেটটাইম তৈরি করে।
টেরেল শামওয়ে

হ্যাঁ. আমার আগের মন্তব্যটি ভুল মারা গিয়েছিল। ডেটটাইম মডিউলের বেশিরভাগ কোড স্থানীয় সময় হিসাবে নিষ্পাপ তারিখের সময়কে বিবেচনা করে। নিষ্পাপ ডেটটাইম ব্যবহার করা এনকোডিং না জেনে কোনও পাঠ্য ফাইল খোলার মতো।
টেরেল শামওয়ে

@ টেরেলশুমওয়ে এটি অনুমান করা ভুল যে ইউটিসি সময়টি কেবলমাত্র স্থানীয় সময় যেখানে ব্যবহৃত সিস্টেমগুলিতে ব্যবহার করা যেতে পারে। এটি সত্য যে স্টাডলিবের কিছু অংশ নিখুঁত ডেটটাইম অবজেক্টগুলিকে স্থানীয় সময় অঞ্চল বলে মনে করে (আফসোস করে)। আমি প্রাধান্য দেব যে পাইথন 3 তে naive_dt.astimezone()অন্তর্নিহিতের মতো অস্তিত্ব থাকবে না bytes.encode()3. এটি সত্য যে অনেক ক্ষেত্রেই ইউটিসি সময় অভ্যন্তরীণভাবে কাজ করা উপকারী। ডেটটাইম মডিউল সম্পর্কে অনেক কিছুই বলা যায় (আমি সোনার ব্যাজ পেতে যথেষ্ট প্রশ্নের উত্তর দিয়েছি) বেশিরভাগ প্রশ্নের সুযোগের বাইরে: কী time.time()ফিরবে।
jfs

4

শেষ পর্যন্ত আমি স্থির হয়েছি:

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0

1
এটি আপনার স্থানীয় চাহিদা মেটাতে পারে তবে [GMT] যুগের পর থেকে এই সীমাতে সংখ্যাটি কয়েক সেকেন্ড হওয়ার প্রত্যাশা করা লোকেরা বিভ্রান্তিকর হতে পারে। time.time()আয় দশমিক / মত ভাসা 1574115250.818733এবং মিলিসেকেন্ড-যেহেতু-কাল সহজে হয় int(time.time() * 1000)যেমন1574115254915
MarkHu

3

নির্দিষ্ট সময় অঞ্চলে "যুগ" নামে কোনও জিনিস নেই। যুগে যুগে সময় একটি নির্দিষ্ট মুহুর্ত হিসাবে ভাল সংজ্ঞায়িত করা হয়, তাই আপনি সময় অঞ্চল পরিবর্তন করলে, সময় নিজেই পরিবর্তন হয়। বিশেষত, এই সময় Jan 1 1970 00:00:00 UTC। সুতরাং time.time()যুগের পর থেকে সেকেন্ডের সংখ্যা ফিরে আসে।


যদিও এটি সত্য যে ইউটিসি একটি সময় স্ট্যান্ডার্ড এবং সময় অঞ্চল নয়, মানটি হ'ল এটি জিএমটি-র মতো একই সময়ে ভাগ করে। সুতরাং ....
ক্রেগ হিক্স

3

টাইমস্ট্যাম্প সর্বদা ইউটিসি তে সময় থাকে তবে আপনি যখন datetime.datetime.fromtimestamp এটি কল করেন তখন এই সময়স্ট্যাম্পের সাথে সম্পর্কিত আপনার স্থানীয় সময় অঞ্চলতে আপনাকে সময় দেয়, সুতরাং ফলস্বরূপ আপনার লোকেলের উপর নির্ভর করে।

>>> import time, datetime

>>> time.time()
1564494136.0434234

>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)

arrowবিভিন্ন আচরণ সহ সুন্দর লাইব্রেরি রয়েছে । একই ক্ষেত্রে এটি আপনাকে ইউটিসি টাইমজোন দিয়ে সময় অবজেক্ট দেয়।

>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.