प्रारूप में एक स्ट्रिंग "%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()
मान लेता है। उत्तर में कोड काम करता है (अपेक्षित उत्पादन करता है ) केवल एक कंप्यूटर पर जहां स्थानीय समय क्षेत्र शून्य utc ऑफसेट है। 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()
POSIX टाइमस्टैम्प में दिनांक ऑब्जेक्ट को परिवर्तित करने का तरीका टाइमज़ोन पर निर्भर करता है। पाइथन में UTC टाइमस्टैम्प में परिवर्तित datetime.date
होने से :
UTC में मध्यरात्रि वस्तु का प्रतिनिधित्व करता है
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())
UTC में मध्यरात्रि तक और जब भी स्थानीय समय हो, टाइमस्टैम्प अलग हैं।
NameError: name 'wckCalendar' is not defined
। मैं विंडोज 32 बिट्स मशीन पर पायथन 3.4.1 चला रहा हूं। कोई उपाय? धन्यवाद।
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
"%s"
पाइथन द्वारा समर्थित नहीं है । यह पोर्टेबल नहीं है।
उत्तर आपके इनपुट की तारीख के समय पर भी निर्भर करता है। यदि आपकी तारीख स्थानीय तारीख है, तो आप kkrielalex की तरह mktime () का उपयोग कर सकते हैं - केवल मैं यह नहीं देखता कि उसने इस छोटे संस्करण के बजाय डेटाइम का उपयोग क्यों किया:
>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0
लेकिन निरीक्षण करें कि मेरा परिणाम उसकी तुलना में अलग है, जैसा कि मैं शायद एक अलग टीबी में हूं (और परिणाम टाइमजोन मुक्त यूनिक्स परीक्षा है)
अब यदि इनपुट दिनांक UTC में पहले से है, तो मेरा मानना है कि सही समाधान है:
>>> 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
स्थानीय समय क्षेत्र के उपयोग के बजाय UTC का उपयोग करने के लिए .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
कई समय क्षेत्रों के लिए यह नहीं है कि काम। Pytz टाइमज़ोन के साथ डेटाटाइम देखें । अलग ऑफसेट कैसे 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
तब तक अपेक्षित नहीं है जब तक आपका स्थानीय समय UTC नहीं होता। देखें 2014 से मेरी टिप्पणी
काफी कुशल लगता है:
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
1.61 means µ 120 ns प्रति लूप (मतलब। एसटीडी। 7 रन का देव, प्रत्येक 100000 लूप)
datetime
कार्य है? पुस्तकालय datetime
से datetime
समर्थन नहीं करता है.timestamp()
बस datetime.timestamp (अपने डेटाटाइम इंस्टेंसे) का उपयोग करें, डेटाटाइम उदाहरण में टाइमज़ोन इन्फोमेशन होता है, इसलिए टाइमस्टैम्प एक मानक utc टाइमस्टैम्प होगा। यदि आप डेटाटाइम को टाइम टेबल में बदल देते हैं, तो यह टाइमज़ोन खो देगा, इसलिए परिणाम त्रुटि होगा। यदि आप एक इंटरफ़ेस प्रदान करना चाहते हैं, तो आपको इस तरह लिखना चाहिए: int (datetime.timestamp (time_instance)) * 1000
आप समय क्षेत्र के साथ किसी भी प्रारूप से दिनांक परिवर्तित करने के लिए, strptime
फ़ंक्शन का उपयोग करने के लिए इस निम्नलिखित लिंक का उल्लेख कर सकते हैं datetime.datetime
।
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
आप isoformat में बदल सकते हैं
my_date = '2020/08/08'
my_date = my_date.replace('/','-') # just to adapte to your question
date_timestamp = datetime.datetime.fromisoformat(my_date).timestamp()
एक साधारण कार्य UNIX युग को प्राप्त करने के लिए।
नोट : यह फ़ंक्शन मानता है कि इनपुट दिनांक समय UTC प्रारूप में है ( टिप्पणियों का संदर्भ लें )।
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