如果条件表达式的计算结果为block,则为Python
问题描述:
我编写了一个方法将日期字符串转换为python中的日期。当我从外部方法获取日期时,毫秒精度将会丢失,而当我在该方法内执行转换时,将保留精度。有人能告诉我这里有什么问题吗?非常感谢!如果条件表达式的计算结果为block,则为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]
真棒。谢谢!我对python相当陌生。没意识到这会打破。顺便说一句,我使用'date_string.count('Z')'而不是查找'date_string.find('Z')'在我的情况下工作正常。 – Jay 2012-02-29 21:50:41
@Jay:更好的是'date_string.endswith('Z')',它检查字符串末尾的存在*和*位置。而且,'date_string = date_string [: - 1]'足以截断最后一个字符。 – 2012-02-29 21:56:23
已采取和实施的建议。谢谢格雷格! – Jay 2012-02-29 22:03:36