我的JSON数据中有一个timestamp字段,其中一些时间戳的时间戳为str("2014-05-12 00:00:00")
格式,另一个为str("2015-01-20 08:28:16 UTC")
格式。我只想从字符串中获取年,月,日字段。我尝试了以下方法,但不确定是什么问题。有人可以纠正我吗?我已经从StackOverflow搜索了一些答案,但是没有任何帮助。
from datetime import datetime
date_posted=str("2014-05-12 00:00:00")
date_posted_zone=str("2015-01-20 08:28:16 UTC")
def convert_timestamp(date_timestamp=None):
if '%Z' in date_timestamp:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S %Z")
else:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S")
return d.strftime("%Y-%m-%d")
print convert_timestamp(date_posted_zone)
答案 0 :(得分:1)
您正在检查文字字符串%Z
是否在时间戳记值中;实际上只有strptime
(和strftime
)可以使用格式字符。
您所能做的就是简单地尝试将字符串解析为具有时区,如果失败,则尝试解析时不带时区。
def convert_timestamp(date_timestamp=None):
try:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S %Z")
except ValueError:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S")
return d.strftime("%Y-%m-%d")
当然,正如所写的,您根本不需要解析字符串。只需将其在空白处分割并返回第一个组件。 (您现有的代码已经假定年/月/日匹配。)
def convert_timestamp(date_timestamp):
return date_timestamp.split()[0]
答案 1 :(得分:1)
我尝试使用以下代码在str中搜索时区及其工作方式。
from datetime import datetime
date_posted=str("2014-05-12 00:00:00")
date_posted_zone=str("2015-01-20 08:28:16 UTC")
zone=date_posted_zone.split(" ")
print(zone[2])
def convert_timestamp(date_timestamp=None):
if zone[2] in date_timestamp:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S %Z")
else:
d = datetime.strptime(date_timestamp, "%Y-%m-%d %H:%M:%S")
return d.strftime("%Y-%m-%d")
print convert_timestamp(date_posted_zone)
答案 2 :(得分:0)
from dateutil import parser
datetime_no_timezone = parser.parse("2015-01-20 08:28:16")
datetime_with_timezone = parser.parse("2015-01-20 08:28:16+02:00")
if datetime_no_timezone.tz == None:
# CODE ALWAYS GO THROUGH THIS
pass
if datetime_no_timezone.tz:
# CODE ALWAYS GO THROUGH THIS
pass