使用strptime将字符串转换为具有时区偏移量的python日期类型对象

时间:2017-01-10 05:04:09

标签: python datetime strptime

使用Tue Jan 10 2017 13:00:13 GMT 0800 (Taipei Standard Time)将此字符串strptime转换为python日期类型对象的正确格式是什么?

我尝试了question的答案,但这对我不起作用:

date1 = datetime.strptime(strDate1, '%b %d %Y %I:%M%p')
  

ValueError:时间数据'星期二2017年1月10日13:00:13 GMT 0800(台北   标准时间)'格式不匹配'%b%d%Y%I:%M%p'

2 个答案:

答案 0 :(得分:2)

您可以设置不带时区的日期格式,稍后再添加

<ion-audio-track track="track" ng-repeat="x in array" ng-if="track.Size!=0">
        <div class="card" ng-class="{'even':$index%2, 'odd':!($index%2)}">
            <div class="row">
              //item prints here
            </div>
          </div>
  </ion-audio-track>

答案 1 :(得分:1)

名义上你可能希望能够使用%z(小写z)来转换TZ偏移,但是对此的支持是粗略的。所以你可以DIY它:

import datetime as dt
import re
PARSE_TIMESTAMP = re.compile('(.*) ([+-]?\d+) \(.*\)$')


def my_datetime_parse(timestamp):
    ''' return a naive datetime relative to UTC '''

    # find the standard time stamp, and the TZ offset and remove extra end
    matches = PARSE_TIMESTAMP.match(timestamp).groups()

    # convert the timestamp element
    timestamp = dt.datetime.strptime(matches[0], '%a %b %d %Y %H:%M:%S %Z')

    # calculate the timezone offset
    tz_offset = matches[1]
    sign = '+'
    if tz_offset[0] in '-+':
        sign = tz_offset[0]
        tz_offset = tz_offset[1:]
    tz_offset += '0' * (4 - len(tz_offset))
    minutes = int(tz_offset[0:2]) * 60 + int(tz_offset[2:])
    if sign == '-':
        minutes = -minutes

    # add the timezone offset to our time
    timestamp += dt.timedelta(minutes=minutes)
    return timestamp

date_string = 'Tue Jan 10 2017 13:00:13 GMT +0800 (Taipei Standard Time)'
print(my_datetime_parse(date_string))

此代码生成:

2017-01-10 21:00:13

代码删除了(Taipei Standard Time),因为+0800是多余的。