如果条件表达式的计算结果为-1,则执行块

时间:2012-02-29 20:58:02

标签: python if-statement

我编写了一个方法,将日期字符串转换为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 个答案:

答案 0 :(得分:4)

这是问题所在:

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]