如果条件表达式的计算结果为 -1,Python if block 就会执行

标签 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

最佳答案

这就是问题:

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

问题是 string.find()如果未找到目标,则返回 -1。由于 -1 不为零,因此 if 语句为 true,然后您的代码会截掉字符串的最后一个字符(无论它是否为 Z)。

对于utc_date,您将执行两次截断,对于local_date,您将执行一次截断,因此结果不同。

我建议:

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

关于如果条件表达式的计算结果为 -1,Python if block 就会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506511/

相关文章:

Python函数的参数默认值是从另一个模块导入的

java - java中如何动态检查条件?

arrays - 数组/匹配/索引问题

javascript - JavaScript 中的 'if' 语句是否需要花括号?

if-statement - 如何在DIA中的序列图上表示if语句?

python - 不同形式的赋值在 python 函数调用中可能出现的顺序是什么?

python - 如何对列表元素的值求和,哪些元素的值来自 Pandas 中的另一个数据框?

python - Tensorflow vs Numpy concat 操作

Python 替代 Ruby 的 grep?

mysql - 创建触发器中的语法错误,出了什么问题?