在python中处理日期的有效方法是什么?

What is an efficient way to trim a date in Python?

目前我正试图用以下代码将当前日期缩减为日、月和年。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#Code from my local machine
from datetime import datetime
from datetime import timedelta

five_days_ago = datetime.now()-timedelta(days=5)
# result: 2017-07-14 19:52:15.847476

get_date = str(five_days_ago).rpartition(' ')[0]
#result: 2017-07-14

#Extract the day
day = get_date.rpartition('-')[2]
# result: 14

#Extract the year
year = get_date.rpartition('-')[0])
# result: 2017-07

我不是Python专业人员,因为几个月前我就掌握了这种语言,但我想了解以下几点:

  • 如果str.rpartition()应该在声明了某种排序分隔符(-,/,"")后分隔字符串,为什么我会收到这个2017-07?我期待着2017年…
  • 有没有有效的方法来区分日、月和年?我不想用不安全的代码重复同样的错误。
  • 我在以下技术设置中尝试了我的代码:本地机器使用python 3.5.2(x64)、python 3.6.1(x64)和repl.it使用python 3.6.1

    在线尝试代码,复制并粘贴行代码


    试试下面的:

    1
    2
    3
    4
    5
    from datetime import date, timedelta

    five_days_ago = date.today() - timedelta(days=5)
    day = five_days_ago.day
    year = five_days_ago.year

    如果你想要的是一个约会的对象(不是一个日期和时间),而不是使用datedatetime。然后,有一天,鸭"是简单的date置业的对象。

    作为对你的问题rpartition分裂的城市,它的作品在rightmost分离器(在你的情况下,连之间的月和日)-那就是在《rrpartition均值。所以get_date.rpartition('-')['2017-07', '-', '14']归来。

    如果你想坚持用你的方法,你的代码会year两种工作方式,如果你rpartitionpartitionreplace",例如:

    1
    2
    year = get_date.partition('-')[0]
    # result: 2017

    然而,也有一个相关的(更好的)方法:使用split

    1
    2
    3
    4
    parts = get_date.split('-')
    year = parts[0]
    month = parts[1]
    day = parts[2]