বিন্যাসে স্ট্রিংকে কীভাবে "%d/%m/%Y"
টাইমস্ট্যাম্পে রূপান্তর করবেন ?
"01/12/2011" -> 1322697600
বিন্যাসে স্ট্রিংকে কীভাবে "%d/%m/%Y"
টাইমস্ট্যাম্পে রূপান্তর করবেন ?
"01/12/2011" -> 1322697600
উত্তর:
>>> import time
>>> import datetime
>>> s = "01/12/2011"
>>> time.mktime(datetime.datetime.strptime(s, "%d/%m/%Y").timetuple())
1322697600.0
calendar.timegm()
বা.toordinal()
datetime.datetime.strptime(s, "%d/%m/%Y").timestamp()
কিছুটা খাটো
.timestamp()
ধরে । উত্তরের কোডটি কেবলমাত্র এমন কম্পিউটারে কাজ করে (প্রত্যাশিত উত্পাদন করে ) যেখানে স্থানীয় টাইমজোনটি শূন্য ইউটিসি অফসেটযুক্ত। 1322697600
আমি ব্যবহার করি ciso8601
যা ডেটটাইমের স্ট্রপটাইমের চেয়ে 62x দ্রুত।
t = "01/12/2011"
ts = ciso8601.parse_datetime(t)
# to get time in seconds:
time.mktime(ts.timetuple())
আপনি এখানে আরও শিখতে পারেন ।
স্ট্রিংটিকে তারিখের অবজেক্টে রূপান্তর করতে:
from datetime import date, datetime
date_string = "01/12/2011"
date_object = date(*map(int, reversed(date_string.split("/"))))
assert date_object == datetime.strptime(date_string, "%d/%m/%Y").date()
তারিখ অবজেক্টটিকে পসিক্স টাইমস্ট্যাম্পে রূপান্তর করার উপায় টাইমজোনের উপর নির্ভর করে। রূপান্তর থেকেdatetime.date
পাইথনে ইউটিসি টাইমস্ট্যাম্পে করা :
তারিখ অবজেক্টটি ইউটিসিতে মধ্যরাতের প্রতিনিধিত্ব করে
import calendar
timestamp1 = calendar.timegm(utc_date.timetuple())
timestamp2 = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * 24*60*60
assert timestamp1 == timestamp2
তারিখ অবজেক্ট স্থানীয় সময় মধ্যরাত প্রতিনিধিত্ব করে
import time
timestamp3 = time.mktime(local_date.timetuple())
assert timestamp3 != timestamp1 or (time.gmtime() == time.localtime())
টাইমস্ট্যাম্পগুলি ইউটিসিতে এবং স্থানীয় সময়ে একই সময় উদাহরণ না হলে ভিন্ন are
NameError: name 'wckCalendar' is not defined
। আমি উইন্ডোজ 32 বিট মেশিনে পাইথন 3.4.1 চালাচ্ছি। কোন ধারণা? ধন্যবাদ।
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
"%s"
পাইথন দ্বারা সমর্থিত নয় । এটি বহনযোগ্য নয়।
উত্তরটি আপনার ইনপুট তারিখের সময় অঞ্চলের উপরও নির্ভর করে। যদি আপনার তারিখটি স্থানীয় তারিখ হয়, তবে আপনি এমপিটাইম () ব্যবহার করতে পারেন যেমন ক্যাটরিল্লেক্স বলেছিলেন - কেবলমাত্র আমি দেখতে পাচ্ছি না কেন তিনি এই সংক্ষিপ্ত সংস্করণের পরিবর্তে ডেটটাইম ব্যবহার করেছিলেন:
>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0
তবে লক্ষ্য করুন যে আমার ফলাফল তার চেয়ে আলাদা, কারণ আমি সম্ভবত অন্য একটি টিজেডে আছি (এবং ফলাফলটি টাইমজোনমুক্ত ইউএনআইএক্স টাইমস্ট্যাম্প)
এখন যদি ইনপুট তারিখটি ইতিমধ্যে ইউটিসি তে থাকে তবে আমার বিশ্বাসের চেয়ে সঠিক সমাধানটি হ'ল:
>>> calendar.timegm(time.strptime('01/12/2011', '%d/%m/%Y'))
1322697600
সহজভাবে ব্যবহার করুন datetime.datetime.strptime
:
import datetime
stime = "01/12/2011"
print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
ফলাফল:
1322697600
স্থানীয় সময় অঞ্চল ব্যবহারের পরিবর্তে ইউটিসি ব্যবহার করতে .replace
:
datetime.datetime.strptime(stime, "%d/%m/%Y").replace(tzinfo=datetime.timezone.utc).timestamp()
float
নয়int
এই উত্তরগুলির অনেকগুলি বিবেচনা করে বিরক্ত করবেন না যে তারিখটি শুরু হওয়ার জন্য নির্দোষ
সঠিক হতে, আপনাকে প্রথমে নিষ্কলুষ তারিখটি টাইমজোন সচেতন তারিখের সময় করতে হবে
import datetime
import pytz
# naive datetime
d = datetime.datetime.strptime('01/12/2011', '%d/%m/%Y')
>>> datetime.datetime(2011, 12, 1, 0, 0)
# add proper timezone
pst = pytz.timezone('America/Los_Angeles')
d = pst.localize(d)
>>> datetime.datetime(2011, 12, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
# convert to UTC timezone
utc = pytz.UTC
d = d.astimezone(utc)
>>> datetime.datetime(2011, 12, 1, 8, 0, tzinfo=<UTC>)
# epoch is the beginning of time in the UTC timestamp world
epoch = datetime.datetime(1970,1,1,0,0,0,tzinfo=pytz.UTC)
>>> datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>)
# get the total second difference
ts = (d - epoch).total_seconds()
>>> 1322726400.0
এছাড়াও:
সাবধান, ব্যবহার pytz
জন্য tzinfo
একটি datetime.datetime
অনেক সময়ের অঞ্চলগুলোকে জন্য না হবে। পাইটজ টাইমজোন সহ ডেটটাইম দেখুন । কীভাবে tzinfo সেট করা আছে তার উপর নির্ভর করে বিভিন্ন অফসেট
# Don't do this:
d = datetime.datetime(2011, 12, 1,0,0,0, tzinfo=pytz.timezone('America/Los_Angeles'))
>>> datetime.datetime(2011, 1, 12, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>)
# tzinfo in not PST but LMT here, with a 7min offset !!!
# when converting to UTC:
d = d.astimezone(pytz.UTC)
>>> datetime.datetime(2011, 1, 12, 7, 53, tzinfo=<UTC>)
# you end up with an offset
import dateutil.parser
dateutil.parser.parse("01/12/2011", dayfirst=True).timestamp()
"%d/%m/%Y"
ফর্ম্যাটে সময় আশা করে। তুলনা করুন: dateutil.parser.parse("01/02/2001")
এবংdatetime.strptime("01/02/2001", "%d/%m/%Y")
1322697600
আপনার স্থানীয় সময় অঞ্চলটি ইউটিসি না হলে এটি প্রত্যাশিত উত্পাদন করে না । 2014 থেকে আমার মন্তব্য
বেশ দক্ষ বলে মনে হচ্ছে:
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
1.61 1.s ± 120 এনএস প্রতি লুপে (মানে ± রানের গড় স্ট্যান্ড। দেব, প্রতিটি 100000 লুপ)
datetime
ফাংশন আছে? লাইব্রেরি datetime
থেকে datetime
সমর্থন করে না.timestamp()
কেবল ডেটটাইম.টাইমস্ট্যাম্প (আপনার ডেটটাইম ইনস্ট্যান্স) ব্যবহার করুন, ডেটটাইম ইনস্টেন্সে টাইমজোন তথ্য রয়েছে, সুতরাং টাইমস্ট্যাম্পটি একটি আদর্শ ইউটিসি টাইমস্ট্যাম্প হবে। আপনি যদি তারিখের সময়কে সময়সীমাতে রূপান্তর করেন তবে এটির সময়সীমা হারাবে, ফলে ফলাফলটি ত্রুটি হবে। আপনি যদি কোনও ইন্টারফেস সরবরাহ করতে চান তবে আপনার এটি লিখতে হবে: int (ডেটটাইম.টাইমস্ট্যাম্প (টাইম_ইনস্ট্যান্স)) * 1000
সময় অঞ্চল সহ যে কোনও ফর্ম্যাট থেকে তারিখ রূপান্তর করতে আপনি strptime
ফাংশনটি ব্যবহার করতে, নিম্নলিখিত লিঙ্কটি উল্লেখ করতে পারেন datetime.datetime
।
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
আপনি আইসফর্ম্যাট রূপান্তর করতে পারেন
my_date = '2020/08/08'
my_date = my_date.replace('/','-') # just to adapte to your question
date_timestamp = datetime.datetime.fromisoformat(my_date).timestamp()
ইউনিক্স যুগের সময় পাওয়ার জন্য একটি সহজ কাজ।
দ্রষ্টব্য : এই ফাংশনটি ধরে নিয়েছে ইনপুট তারিখের সময়টি ইউটিসি ফর্ম্যাটে রয়েছে ( এখানে মন্তব্যগুলিতে দেখুন )।
def utctimestamp(ts: str, DATETIME_FORMAT: str = "%d/%m/%Y"):
import datetime, calendar
ts = datetime.datetime.utcnow() if ts is None else datetime.datetime.strptime(ts, DATETIME_FORMAT)
return calendar.timegm(ts.utctimetuple())
ব্যবহার :
>>> utctimestamp("01/12/2011")
1322697600
>>> utctimestamp("2011-12-01", "%Y-%m-%d")
1322697600