Python - 从Datetime字符串中删除时间

时间:2014-10-02 02:47:13

标签: python python-2.7 datetime strptime

我有一个日期字符串,想要将其转换为日期类型:

我已尝试将datetime.datetime.strptime用于我想要的格式,但它会返回转换时间。

    when = alldates[int(daypos[0])]
    print when, type(when)

    then = datetime.datetime.strptime(when, '%Y-%m-%d')
    print then, type(then)

这是输出返回的内容:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>

我需要删除时间:00:00:00。

7 个答案:

答案 0 :(得分:48)

print then.date()

你想要的是datetime.date对象。你拥有的是datetime.datetime对象。您可以在按上述方式打印时更改对象,也可以在创建对象时执行以下操作:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()

答案 1 :(得分:5)

>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>

答案 2 :(得分:1)

要将字符串转换为日期,AFAIK最简单的方法是dateutil模块:

import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")

它还可以处理时区:

print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())

如果您有日期时间对象,请说:

import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)

并且你希望砍掉时间部分,然后我认为构造一个新对象而不是“减去时间部分”更容易。它更短更防弹:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)

它还保存时区信息,比timedelta减法更容易阅读和理解,并且您还可以选择在同一步骤中给出不同的时区(这是有道理的,因为您将没有时间无论如何)。

答案 3 :(得分:1)

如果需要使结果具有时区意识,则可以使用const res = ' 1 22 333 4444 5 6 ' .split(' ') .filter(Boolean) .map(v => [v]) .reduce((acc, curr, idx) => { acc = idx % 2 ? [...acc.slice(0, acc.length-1), acc[acc.length-1].concat(curr)] : [...acc, curr]; return acc; }, []); console.log(res);对象的replace()方法。这样可以保留时区,因此您可以

datetime

请注意,这将返回一个 new 日期时间对象->>> from django.utils import timezone >>> now = timezone.now() >>> now datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>) >>> now.replace(hour=0, minute=0, second=0, microsecond=0) datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>) 保持不变。

答案 4 :(得分:0)

对我来说,我需要保留一个时间对象,因为我使用的是UTC,这有点痛苦。所以,这就是我最终做的事情:

date = datetime.datetime.utcnow()

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond
)

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59
)

示例输出:

>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)

答案 5 :(得分:0)

您只需使用conn = pgconn(------) cursor = pgconn.Cursor() query1 = "select * from table" query2 = "select * from table2 where Id=(%s);" cursor.execute(query1) result = query1.fetchall() for row in result: If row.a == 2: cursor.execute(query2, [row.time]) ,熊猫便会将日期元素转换为ISO日期格式-pd.to_datetime(then)

您也可以将其作为地图/应用传递,也可以在数据框/系列中使用。

答案 6 :(得分:0)

您可以使用以下代码: week_start = str(datetime.today() - timedelta(days=datetime.today().weekday() % 7)).split(' ')[0]