Pythonのdatetimeオブジェクトから年を抽出する方法は?


107

Pythonを使用して現在の日付から年を抽出したいと思います。

C#では、次のようになります。

 DateTime a = DateTime.Now() 
 a.Year

Pythonでは何が必要ですか?

回答:


155

実際、Pythonでもほぼ同じです。

import datetime
year = datetime.date.today().year

もちろん、日付には時刻が関連付けられていないため、これも気になる場合は、完全なdatetimeオブジェクトで同じことを行うことができます。

import datetime
year = datetime.datetime.today().year

(もちろん違いはありませんが、もちろん、年を取得する前に変数にdatetime.datetime.today()を格納できます)。

注意すべき重要な点の1つは、一部のpythonバージョン(2.5.xツリーと思う)では、32ビットと64ビットのpythonで時間コンポーネントが異なる可能性があることです。したがって、一部の64ビットプラットフォームでは時/分/秒のようなものが見つかり、32ビットでは時/分/秒が得られます。


1
datetime.datetime.today()。yearはPython 3では機能しませんでしたエラーAttributeError:type object 'datetime.datetime' has no attribute 'datetime'が返されました。私はdatetime.today()。year
ません

1
@twumm、それは「datetimeインポート日時から」として日時をインポートしたためです。単に「日時のインポート」を実行した場合、ソリューションは正常に動作します。それはあなたが持っているものとまったく同じです。
Apteronotus

26
import datetime
a = datetime.datetime.today().year

または(レナートが示唆したように

a = datetime.datetime.now().year

あるいは

a = datetime.date.today().year

1
ただし、date()の方がdatetimeの方が自然に感じられます。datetime.date.today()。year、たぶん。:)
Lennart Regebro 2009

私はそれについて考えていませんでした、そしてそれは時間に関してより「正確」に感じられると思います。今日()は日の精度を意味するように見えるかもしれません。(少なくとも2.5.4では)datetime.today()とdatetime.now()が同じことをするのは

それらはまったく同じではありません、datetime.now()はタイムゾーンオブジェクトを受け入れますが、datetime.today()はfromtimestamp(time.time())を呼び出すだけなので、today()は常に、Pythonがローカルタイムゾーンと見なしているものになります一方、now()を取得して、もう少し興味深いことを伝えることができます。
ニックバスティン

17

この質問に対する他の回答は、その場でヒットするようです。スタックオーバーフローなしでこれを自分でどのように理解できるでしょうか。タブのオートコンプリート機能を備えたインタラクティブなPythonシェルであるIPythonをチェックしてください。

> ipython
import Python 2.5 (r25:51908, Nov  6 2007, 16:54:01)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.2.svn.r2750 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import datetime
In [2]: now=datetime.datetime.now()
In [3]: now.

タブを数回押すと、「now」オブジェクトのメンバーが表示されます。

now.__add__           now.__gt__            now.__radd__          now.__sub__           now.fromordinal       now.microsecond       now.second            now.toordinal         now.weekday
now.__class__         now.__hash__          now.__reduce__        now.astimezone        now.fromtimestamp     now.min               now.strftime          now.tzinfo            now.year
now.__delattr__       now.__init__          now.__reduce_ex__     now.combine           now.hour              now.minute            now.strptime          now.tzname
now.__doc__           now.__le__            now.__repr__          now.ctime             now.isocalendar       now.month             now.time              now.utcfromtimestamp
now.__eq__            now.__lt__            now.__rsub__          now.date              now.isoformat         now.now               now.timetuple         now.utcnow
now.__ge__            now.__ne__            now.__setattr__       now.day               now.isoweekday        now.replace           now.timetz            now.utcoffset
now.__getattribute__  now.__new__           now.__str__           now.dst               now.max               now.resolution        now.today             now.utctimetuple

そして、now.yearが「now」オブジェクトのメンバーであることがわかります。


2
また、これ:docs.python.org/library/datatypes.htmlですが、ありがとうございます

2
問題解決のための称賛—実際のソリューションを補完します。
Iceland_jack

ipythonをインストールしたくない場合は、関数またはクラスをdirでラップするだけで、可能なメソッドと属性を確認できます。同様に、dir(datetime.datetime.now)は、ipythonでタブを押すなどの使用可能な機能を提供します。
Saurav Pathak

6

(不明な)日時オブジェクトから年を取得する場合:

tijd = datetime.datetime(9999, 12, 31, 23, 59, 59)

>>> tijd.timetuple()
time.struct_time(tm_year=9999, tm_mon=12, tm_mday=31, tm_hour=23, tm_min=59, tm_sec=59, tm_wday=4, tm_yday=365, tm_isdst=-1)
>>> tijd.timetuple().tm_year
9999
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.