質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

18897閲覧

datetimeモジュールの使い方について

gomakichi

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/10/23 13:18

###前提・実現したいこと
現在Pythonを使って現在日時を取得する処理を書いています。

やりたいこととしては、datetime関数で現在日時を取得し、その後時間部分を削ってフォーマット整形
をしたいと思っています。
例) 現在が2017年10月20日17:35:38.123456ならば
→整形後に2017-10-20にしたいという状況です。

しかし、

###発生している問題・エラーメッセージ

AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

とエラーがでてしまいまっています。

###該当のソースコード

import datetime ~~~ 途中省略 ~~~ date = datetime.datetime.now() print('test_{0:%Y%m%d}'.format(date))

###試したこと
他のサイトを調べ、

date = datetime.datetime.now() print('test_{0:%Y%m%d}'.format(date))

と変更してみましたが

ValueError: Couldn't parse datetime string: '2017-10-23'

というエラーがでてしまいます。
(このエラーが指すものもわかっていない状態です...)

また、

datetime_dat = datetime.now() time_str = datetime_dat.strftime('%Y/%m/%d') time_dat = datetime.strptime(time_str, '%Y-%m-%d')

こんな風にやってみましたがなかなか上手くいかず困っています。
アドバイスいただけたら嬉しいです。

###補足情報(言語/FW/ツール等のバージョンなど)
Python
Jinja2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どのコードを実行したときに、エラーが発生したのかわかりづらいですね。
以下のようなコードを書いた際にエラーが発生したと思われますが

python

1from datetime import datetime 2 3date = datetime.datetime.now()

from datetime import datetimeの意味は、datetimeモジュールのdatetimeオブジェクトをインポートするという意味です。
datetimeモジュールにはdatetime以外にもtimedelta、date、timeといったオブジェクトがあります。

モジュールの構成としては以下のような感じですね。

txt

1datetimeモジュール 2 +---datetimeオブジェクト 3 | +---year属性 4 | +---month属性 5 | +---... 6 | +---now()メソッド 7 | +---today()メソッド 8 | +---... 9 +---timedeltaオブジェクト 10 | +---... 11 +---timeオブジェクト 12 +---...

from datetime import datetimeでdatetimeオブジェクトをインポート済みの状態でdatetime.datetime.now()を行うと、datetimeオブジェクトのdatetime属性のnow()メソッドを実行するという意味になってしまいます。
そのため、エラーとして、「そんな属性ありません。」と怒られます。

datetimeオブジェクトインポート済みであれば、提示されているコードで期待されている結果がでますよ。

ptyhon

1from datetime import datetime 2 3datetime_dat = datetime.now() 4time_str = datetime_dat.strftime('%Y/%m/%d') 5print(time_str)

ちなみに、import datetimeとした場合には、datetimeモジュールを全部を読み込むことになります。
そして、その状態でdatetime.now()を実行すると、datetimeモジュールにはnowなんて属性がありませんと怒られます。

投稿2017/10/23 15:01

sa-yu

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomakichi

2017/10/23 15:11

from datetime import datetimeとimport datetimeの違いがおそらく理解できていないのだとわかりました。 詳しく説明していただきありがとうございます。試してみます、ありがとうございます。
guest

0

print部分を以下のようにすれば出力されるはずです。
print(date.date())

datetime.detetime.now()で取得した値は日付型という少し特殊なもので、年月日を取得するためには.date()を付与する必要があります。datetimeの年月日のフォーマットはyyyy-mm-ddなのでそれ以外のものにする必要がある場合は、年・月・日を個別に取得して編集する必要があります。

投稿2017/10/23 14:14

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomakichi

2017/10/23 15:00

回答ありがとうございます。 実際の処理ではprint文ではなく変数に代入してfor文で回してリストのようにして表示させたいのですが、その場合は dt = date.date()のようにすればいいのでしょうか? また、それぞれのエラーの意味がわからないのですが、それぞれ何が間違っているのでしょうか?
R.Shigemori

2017/10/23 21:24

日付型の変数も変数に相違ないので、ご質問の処理は可能です。 それと、ふと気が付いたのですが、datetime.date.today()とすると、年月日を取得できます。編集不要という点ではこちらのほうが便利かもしれません。 エラーの意味は、trace back全体がないと何とも言えない部分があります。また、バージョンによってできることとできないことがあるようで、ご提示いただいたソースを当方の環境で実行すると、ご指摘のようなエラーは発生しませんでした。
gomakichi

2017/10/24 01:41

あくまで時間は取得しておいて(後ほど使用する可能性があるので)現時点の表示ではフォーマットを整形して日にちのみ表示させる予定でした。色々とアドバイスいただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問