プロが教える店舗&オフィスのセキュリティ対策術

TwitterのAPIからの日付を処理しようとしたのですが、
下記のコードではAttributeErrorの例外が発生します。
そもそも日付ライブラリを使うにはあっちこっちのサイトを見てみたのですが、
[from datetime import datetime]と[import datetime]という二つの書き方があるようですあが、
前者と後者ではある構文が例外になったりならなかったりするのですが、
この二つの宣言の区別が全然解りません。


from datetime import datetime

tweet = 'Fri Mar 23 05:26:17 +0000 2018'

dt = datetime.strptime(tweet, '%a %b %d %H:%M:%S %z %Y')
Time_JMT = dt + datetime.timedelta(hours=9)
print(Time_JMT)

dt = dt.astimezone()
dst = datetime.strftime(dt, '%Y/%m/%d %H:%M:%S')

print(dst, type(dst))

A 回答 (3件)

[import datetime]これはdatetimeというモジュール全体を呼び込む


[from datetime import datetime]これはdatetimeの中にあるdatetimeだけを呼び出す

datetimeについては以下をよく読むと良いです
https://docs.python.jp/3.6/library/datetime.html …
    • good
    • 0

ライブラリのdatetime.pyを見て頂ければお分かりになりますが


以下の様な構造になっています。

datetime --レベル1 モジュール名
  datetime --レベル2 クラス定義
    strptime --レベル3 クラスメソッド定義
    strftime --同上
  timedelta --レベル2 クラス定義

パターンAでは、datetimeモジュールを読み込んでいるので、使用する時にはレベル1から記述する必要があります。
パターンBでは、datetimeモジュール内のdatetimeクラスとtimedeltaクラスを読み込んでいるので、使用する場合にはレベル2からの記述になります。

-----パターンA
import datetime

tweet = 'Fri Mar 23 05:26:17 +0000 2018'
dt = datetime.datetime.strptime(tweet, '%a %b %d %H:%M:%S %z %Y')
Time_JMT = dt + datetime.timedelta(hours=9)
print(Time_JMT)
dt = dt.astimezone()
dst = datetime.datetime.strftime(dt, '%Y/%m/%d %H:%M:%S')
print(dst, type(dst))


----パターンB
from datetime import datetime
from datetime import timedelta

tweet = 'Fri Mar 23 05:26:17 +0000 2018'
dt = datetime.strptime(tweet, '%a %b %d %H:%M:%S %z %Y')
Time_JMT = dt + timedelta(hours=9)
print(Time_JMT)
dt = dt.astimezone()
dst = datetime.strftime(dt, '%Y/%m/%d %H:%M:%S')
print(dst, type(dst))
----
    • good
    • 1
この回答へのお礼

大変ありがとうございました。違いもよくわかりコードの修正もいただき助かります。

お礼日時:2018/11/29 07:15

from datetime import datetime


これはdatetimeモジュールのdatetimeクラスを
datetimeという名称で使えるようにする。

import datetime

これはdatetimeモジュールをdatetimeという名前で参照できるようにする。

つまり、datetimeという名称か指すものが違う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!