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

如果条件表达式的计算结果为-1,则执行Python if块,python,if-statement,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

我用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
这就是问题所在:

if date_string.find('Z'):
    date_string = date_string[:len(date_string)-1]
问题是,如果未找到目标,则返回
-1
。由于-1不是零,因此
if
语句为true,然后代码将删除字符串的最后一个字符(无论它是否为
Z

utc_date
的情况下,您将执行两次截断,在
local_date
的情况下执行一次截断,因此您的结果不同

我建议:

if date_string.endswith('Z'):
    date_string = date_string[:-1]
这就是问题所在:

if date_string.find('Z'):
    date_string = date_string[:len(date_string)-1]
问题是,如果未找到目标,则返回
-1
。由于-1不是零,因此
if
语句为true,然后代码将删除字符串的最后一个字符(无论它是否为
Z

utc_date
的情况下,您将执行两次截断,在
local_date
的情况下执行一次截断,因此您的结果不同

我建议:

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

令人惊叹的。谢谢我对python相当陌生。没想到这会破裂。顺便说一句,我使用了
date\u string.count('Z')
而不是find
date\u string.find('Z')
,它在我的情况下工作得很好。@Jay:最好是
date\u string.endswith('Z')
,它检查字符串末尾的存在和位置。另外,
date\u string=date\u string[:-1]
足以截断最后一个字符。已采纳并实施建议。谢谢你,格雷格!为什么不
date\u string.rstrip(“Z”)
?@kindall:那也行。我通常只在截断空白时使用
rstrip()
,但正如您所说,它可以处理任意字符集。太棒了。谢谢我对python相当陌生。没想到这会破裂。顺便说一句,我使用了
date\u string.count('Z')
而不是find
date\u string.find('Z')
,它在我的情况下工作得很好。@Jay:最好是
date\u string.endswith('Z')
,它检查字符串末尾的存在和位置。另外,
date\u string=date\u string[:-1]
足以截断最后一个字符。已采纳并实施建议。谢谢你,格雷格!为什么不
date\u string.rstrip(“Z”)
?@kindall:那也行。我通常只在截断空白时使用
rstrip()
,但正如您所说,它可以处理任意字符集。