ইউনিক্স টাইমস্ট্যাম্প বিন্যাসে বর্তমান জিএমটি সময় পাওয়ার সহজতম উপায় কী?


175

পাইথন বিভিন্ন প্যাকেজ (উপলব্ধ datetime, time, calendar) হিসেবে দেখা যেতে পারে এখানে অর্ডার সময়ের সাথে সাথে মোকাবেলা করতে হবে। আমি বর্তমান GMT সময় পেতে নিম্নলিখিত ব্যবহার করে একটি বড় ভুল করেছিtime.mktime(datetime.datetime.utcnow().timetuple())

ইউনিক্স টাইমস্ট্যাম্পে বর্তমান জিএমটি সময় পাওয়ার সহজ উপায় কী?


1
ইনপুট / আউটপুট কি? datetime.utcnow()ডেটটাইম অবজেক্ট হিসাবে বর্তমান ইউটিসি সময়কে ফেরত দেয় (আমি ধরে নিই যে আপনি "জিএমটি সময়" সম্পর্কে কথা বলার সময় আপনি ইউটিসি চান)) time.time()ইউনিক্স টাইমস্ট্যাম্পটি সরাসরি ফ্লোট নম্বর হিসাবে প্রত্যাবর্তন করে। ইউটিসিতে সময় প্রতিনিধিত্বকারী ডেটটাইম.ডেট / ডেটটাইম.ডেটটাইমকে পসিক্স টাইমস্ট্যাম্পে রূপান্তর করার উপায় এখানে ।
jfs

আপনার প্রস্তাবিত পদ্ধতিটি ভুল, বা খুব ভার্জোজ? সংশ্লিষ্ট: stackoverflow.com/questions/15940280/...
সিরো Santilli郝海东冠状病六四事件法轮功

আপনার পদ্ধতিটি কেন ভুল ছিল?
skeller88

উত্তর:


230

আমি যুগের আগে থেকে সেকেন্ডে টাইমস্ট্যাম্প পেতে টাইম.টাইম () ব্যবহার করতাম।

import time

time.time()

আউটপুট:

1369550494.884832

বেশিরভাগ প্ল্যাটফর্মগুলিতে স্ট্যান্ডার্ড সিপিথন প্রয়োগের জন্য এটি একটি ইউটিসি মান প্রদান করবে।


21
ধরাটি হ'ল আপনার মেশিনের লোকাল ক্লকটি ইউটিসিতে নাও থাকতে পারে।
9000

@ 9000: সঠিক, যদিও আমি সবসময় ইউটিসি-র প্রতি এমন পরিবেশে জেদ করব যেখানে সময় মেটানোর ক্ষেত্রে থাকে। এবং তিনি সহজ সমাধান চেয়েছিলেন। নোট করুন যে লিনাক্স, বিএসডি, ম্যাক ওএস এক্স, এবং উইন্ডোজ সহ আধুনিক প্ল্যাটফর্মগুলিতে সিপিথন সহ সমস্ত সময়.টাইম () এর জন্য ইউটিসি ফিরে আসবে। এটি এই ওএসগুলিতে সি স্ট্যান্ডার্ড লাইব্রেরির সময়ের ক্রিয়াকলাপের আচরণকে আয়না দেয়।
এডমন্ড বারনেট

66
@ 9000: স্থানীয় টাইমজোন কিছু যায় আসে না। ইউনিক্স সময়টি ইউটিসি সময়ের সাথে মিলে যায় (যদি আমরা লিপ সেকেন্ডের সময়টিকে উপেক্ষা করি) ignore এটি সম্পর্কে চিন্তা করুন: টাইমস্ট্যাম্পটি মহাকালের (সময় একটি নির্দিষ্ট মুহুর্ত) থেকে কেটে যাওয়া সেকেন্ডের সংখ্যা: কেন এটি টাইমজোন মেশিনের স্থানীয় ঘড়ি ব্যবহার করে তার উপর নির্ভর করবে? সময়ের যে কোনও মুহুর্তে ইউনিক্সের সময়টি বিশ্বজুড়ে একই রকম। কিছু (অজানা) প্ল্যাটফর্ম একটি পৃথক যুগ ব্যবহার করতে পারে তবে এর মান এখনও স্থানীয় সময় অঞ্চলের উপর নির্ভর করবে না।
jfs



42

এটা কি সাহায্য করে?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime

পাইথন ইউটিসি ডেটটাইম অবজেক্টটিকে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করবেন কীভাবে


@ কেয়ারনারভন এটি কেবল একটি উদাহরণ। আপনি যদি বর্তমান টাইমস্ট্যাম্প চান তবে আপনি কেবল কল করতে পারেন time.time()এবং কোনও ডেটটাইম রূপান্তর প্রয়োজন নেই।
মেসা

1
এফডাব্লুআইডাব্লু: এটি ইউটিসি সময় নয়, এটি ইউটিসি স্থানীয় সময়ে রূপান্তরিত। ইউটিসিতে একটি টাইমস্ট্যাম্প পেতে আপনাকে অন্য কিছু করতে হবে।
শার্লক

18

বা কেবল খালি তারিখের মান মডিউলটি ব্যবহার করে

In [2]: from datetime import timezone, datetime
   ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
   ...: 
Out[2]: 1514901741720

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

আপনি যদি উপযুক্ত ইউনিক্স টাইমস্ট্যাম্প চান (সেকেন্ডে) সরিয়ে ফেলুন* 1000


আপনার কোডটি খুব নির্দিষ্টভাবে একটি পূর্ণসংখ্যায় সময় জোর করে চলেছে তাই আমি বিভ্রান্ত হয়েছি কেন আউটপুট পাঠ্য দশমিক সংখ্যা?
ওয়েস্টন

হে আমার খারাপ, আমি পরে
ইন্টার

এটি জাভাস্ক্রিপ্ট momentলাইব্রেরির ঠিক সমতুল্য moment().utc().valueOf()। ঠিক আমি খুঁজছেন ছিল কি. ধন্যবাদ
আজহার 22k

ইউনিক্স টাইমস্ট্যাম্পটি ১৯ 1970০ সাল থেকে সেকেন্ডের বলে মনে করা হচ্ছে this
২১

1
"আপনি যে রেজোলিউশনটি চান তার উপর নির্ভর করে আপনি কাটা বা গুণ করতে পারেন" * 1000 অংশটি ফেলে দিন এবং আপনি সেকেন্ড পান।
মারেশ

18

পাইথন 2 এবং পাইথন 3

সময় মডিউলটি ব্যবহার করা ভাল

import time
int(time.time())

1573708436

আপনি ডেটটাইম মডিউলটিও ব্যবহার করতে পারেন, তবে আপনি যখন স্ট্রফটাইম ('% s') ব্যবহার করেন তবে স্ট্রফটাইম আপনার স্থানীয় সময়ে রূপান্তর করে!

python2

from datetime import datetime
datetime.utcnow().strftime('%s')

python3

from datetime import datetime
datetime.utcnow().timestamp()

2
ইউটিসি +1 হচ্ছে, time.time()এবং datetime.utcnow().timestamp()কি না একই মান দিতে!
ব্যবহারকারী 136036

এছাড়াও আমি দ্বিতীয় বিকল্পটি সঠিক হওয়ার প্রত্যাশা করলেও, ইউটিসি + 1100 এ সঠিক মান পেতে আমাকে ডেটটাইম.নো ()। টাইমস্ট্যাম্প () ব্যবহার করতে হয়েছিল। আমি টাইমস্ট্যাম্প () প্রত্যাশিত হয়েছিল যে কোনওটির জন্যই সঠিকভাবে কাজ করবে তবে মনে হয় না
ডেভিড ওয়াটারওয়ার্থ

কাছাকাছি তাকান, ডেটটাইম.টুকনো () এবং ডেটটাইম.নো () উভয়ই একটি নির্লজ্জ ডেটটাইম (টিজিনফো নয়) ফিরিয়ে দেয় এবং টাইমস্ট্যাম্প () tzinfo = নাল হয়ে গেলে স্থানীয় বলে মনে হয়।
ডেভিড ওয়াটারওয়ার্থ

2

আমি এই পদ্ধতিটি পছন্দ করি:

import datetime, time

dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6)

এখানে পোস্ট করা অন্যান্য পদ্ধতিগুলি হয় আপনাকে সমস্ত প্ল্যাটফর্মে ইউটিসি দেওয়ার গ্যারান্টিযুক্ত নয় বা কেবল পুরো সেকেন্ডে রিপোর্ট করবে। আপনি যদি পুরো রেজোলিউশন চান তবে এটি কাজ করে মাইক্রো সেকেন্ডে।


1
দুর্ভাগ্যক্রমে আপনি ইউটিসি + 0000 টাইমজোন না হয়ে থাকলে এটি ইউটিসি দেবে বলে মনে হচ্ছে না। utctimetupleপরিবর্তে ব্যবহার ট্রিক যদিও।
২১

1
from datetime import datetime as dt
dt.utcnow().strftime("%s")

আউটপুট:

1544524990

এটি time.time()আমার মতো আর ফিরে আসে না ।
আলওয়িনিয়াস

1
এটি সম্ভবত কারণ টাইমজোন তথ্য ছাড়া dt.utcnowএকটি datetime। তারপরে strftimeধরে নেওয়া যায় যে datetimeস্থানীয় সময়।
২১

1
@ সাইকিং এই পৃষ্ঠায় প্রায় সমস্ত উত্তরের জন্য এটি বেশ সমস্যা!
ডেভিড ওয়াটারওয়ার্থ

1
#First Example:
from datetime import datetime, timezone    
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)

আউটপুট: 1572878043380

#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)

আউটপুট: 1572878043

  • এখানে আমরা দেখতে পাচ্ছি প্রথম উদাহরণটি দ্বিতীয়টির চেয়ে আরও সঠিক সময় দেয়।
  • এখানে আমি প্রথমটি ব্যবহার করছি।

1

কমপক্ষে পাইথন 3 এ, এটি কাজ করে:

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.