Python if block выполняется, если выражение условия имеет значение -1 - PullRequest
2 голосов
/ 01 марта 2012

Я написал метод для преобразования строки даты в дату в Python. Когда я получаю дату из внешнего метода, точность в миллисекундах теряется, тогда как когда я выполняю приведение в методе, точность сохраняется. Может ли кто-нибудь дать мне знать, в чем здесь проблема? Большое спасибо!

from datetime import datetime
from pytz import timezone   

def getUTCTimeFromString(date_string):
    #allow time with Z in it
    if date_string:
        if date_string.find('Z'):
            date_string = date_string[:len(date_string)-1]
        return datetime.strptime(date_string,"%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=timezone('UTC'))
    return None

def getStringFromDate(dateObject):
    return dateObject.strftime('%Y-%m-%d %H:%M:%S.%f')

#Method being tested
# Input 2012-02-27T05:32:10.607Z
def getEasternTimeFromString(date_string):
    if date_string:
        if date_string.find('Z'):
            date_string = date_string[:len(date_string)-1]
        local_date = datetime.strptime(date_string,"%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=timezone('UTC'))
        utc_date = getUTCTimeFromString(date_string)
        print 'utc date from external method --> '+getStringFromDate(utc_date)
        print 'utc date calculated locally -->' +getStringFromDate(local_date)
        return utc_date.astimezone(timezone('US/Eastern'))
    return None

1 Ответ

4 голосов
/ 01 марта 2012

Это проблема:

if date_string.find('Z'):
    date_string = date_string[:len(date_string)-1]

Проблема в том, что string.find() возвращает -1, если цель не найдена. Поскольку -1 не равен нулю, оператор if является истинным, и тогда ваш код обрезает последний символ строки (был ли это Z или нет).

Вы делаете это усечение дважды в случае utc_date и один раз в случае local_date, таким образом, ваши различные результаты.

Я бы предложил:

if date_string.endswith('Z'):
    date_string = date_string[:-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...