有没有直接的方法来忽略python日期时间对象的部分?

时间:2016-08-26 05:47:27

标签: python datetime

我正在尝试比较两个日期时间对象,但忽略了年份。例如,给定

a = datetime.datetime(2015,07,04,01,01,01)
b = datetime.datetime(2016,07,04,01,01,01)

我希望== b通过忽略年份返回True。为了做这样的比较,我想我可以在同一年创建新的日期时间对象,如:

c = datetime.datetime(2014,a.month,a.day,a.hour,a.minute,a.second)
d = datetime.datetime(2014,b.month,b.day,b.hour,b.minute,b.second)

然而,这似乎不是非常pythonic。是否有更直接的方法来进行比较,就像我要问的那样?

我正在使用python 3.4。

5 个答案:

答案 0 :(得分:8)

(a.month, a.day, a.hour, a.minute, a.second == 
 b.month, b.day, b.hour, b.minute, b.second)

一种不太明确的方法是比较时间元组中的相应元素:

a.timetuple()[1:6] == b.timetuple()[1:6]

答案 1 :(得分:5)

尝试:

from datetime import datetime

date_string = '%m %d %H %M %S'
a = datetime(2015, 7, 4, 1, 1, 1)
b = datetime(2016, 7, 4, 1, 1, 1)
print(a.strftime(date_string) == b.strftime(date_string))  # True

答案 2 :(得分:3)

您还可以考虑比较格式化的日期字符串,其中包含您希望包含在比较中的字段。这使您在使用缩短版本的字段时可以有些明确(而不是访问operatorIda.year等。)

a.month

答案 3 :(得分:1)

def cmp(a,b):
 return (a > b) - (a < b)

d1=(2015,7,4,1,1,1)
d2=(2016,7,4,1,1,1)

cmp(list(d1)[1:],list(d2)[1:])

返回0 - 它们是相同的,即0差异

d1=(2015,7,4,1,1,1)
d2=(2015,2,4,1,1,1)

cmp(list(d1)[1:], list(d2)[1:])

返回-1,有区别。

答案 4 :(得分:0)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.blabla.NavigationDrawerFragment"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/linid"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:background="#0064a7"
        android:paddingLeft="20dp">

        <ImageView
            android:layout_width="240dp"
            android:layout_height="120dp"
            android:elevation="20dp"
            android:gravity="center_vertical"
            android:src="@drawable/zanderlogo" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/drawerList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v7.widget.RecyclerView>    
</LinearLayout>