如何使用Python

时间:2018-10-18 13:32:04

标签: python datetime

我的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)

3 个答案:

答案 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