[Python] ISO Time (ISO 8601) في بيثون؟



Answers

لقد وجدت datetime.isoformat في doc ؛ يبدو أن تفعل ما تريد:

datetime.isoformat([sep])

Return a string representing the date and time in ISO 8601 format, YYYY-MM-DDTHH:MM:SS.mmmmmm or, if microsecond is 0, YYYY-MM-DDTHH:MM:SS

If utcoffset() does not return None, a 6-character string is appended, giving the UTC offset in (signed) hours and minutes: YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if microsecond is 0 YYYY-MM-DDTHH:MM:SS+HH:MM

The optional argument sep (default 'T') is a one-character separator, placed between the date and time portions of the result. For example,
>>>

>>> from datetime import tzinfo, timedelta, datetime
>>> class TZ(tzinfo):
...     def utcoffset(self, dt): return timedelta(minutes=-399)
...
>>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
'2002-12-25 00:00:00-06:39'
Question

لدي ملف. في بايثون ، أود أن أستغرق وقت إنشائها ، وتحويله إلى سلسلة ISO (ISO 8601) مع الحفاظ على حقيقة أنه تم إنشاؤه في المنطقة الزمنية الشرقية .

كيف يمكنني أخذ ctime للملف وتحويله إلى سلسلة وقت ISO ، التي تشير إلى التوقيت الشرقي (وتأخذ في الاعتبار التوقيت الصيفي ، إذا لزم الأمر)؟




import datetime, time    
def convert_enddate_to_seconds(self, ts):
    """Takes ISO 8601 format(string) and converts into epoch time."""
     dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+\
                datetime.timedelta(hours=int(ts[-5:-3]),
                minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
    seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
    return seconds 

>>> import datetime, time
>>> ts = '2012-09-30T15:31:50.262-08:00'
>>> dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+ datetime.timedelta(hours=int(ts[-5:-3]), minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
>>> seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
>>> seconds
1348990310.26



ستحتاج إلى استخدام os.stat للحصول على وقت إنشاء الملف time.strftime من time.strftime و time.timezone للتنسيق:

>>> import time
>>> import os
>>> t = os.stat('C:/Path/To/File.txt').st_ctime
>>> t = time.localtime(t)
>>> formatted = time.strftime('%Y-%m-%d %H:%M:%S', t)
>>> tz = str.format('{0:+06.2f}', float(time.timezone) / 3600)
>>> final = formatted + tz
>>> 
>>> final
'2008-11-24 14:46:08-02.00'

تحرير: تحولت من gmtime() إلى localtime() .




إليك ما أستخدمه للتحويل إلى تنسيق Datetime XSD:

from datetime import datetime    
datetime.now().replace(microsecond=0).isoformat()
# You get your iso string

جئت عبر هذا السؤال عند البحث عن تنسيق وقت XSD. كنت بحاجة إلى إزالة microseconds من isoformat . في صحتك!




أتفق مع Jarek ، وألاحظ أيضًا أن حرف فاصل إزاحة ISO يمثل علامة النقطتين ، لذا أعتقد أن الإجابة النهائية يجب أن تكون:

isodate.datetime_isoformat(datetime.datetime.now()) + str.format('{0:+06.2f}', -float(time.timezone) / 3600).replace('.', ':')



Links