🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

2318閲覧

python %y年%m月%m日 から %y/%m/%d への変換

gmtt

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/02/16 15:17

前提・実現したいこと

python で

2021年1月2日

という表記を

20210102

というような表記にしたいと思っているのですが、うまくいきません。どうか、ご教示ください。

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

TypeError Traceback (most recent call last) <ipython-input-131-76ebffa1b79e> in <module>() ----> 1 date = datetime.datetime(date) TypeError: an integer is required (got type list)

該当のソースコード

python

1date 2と入力すると 3 42021125と出力される状況で、 6 7date = re.findall(r'\d+' , date) 8date = datetime.datetime(date)

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

普通に使われているのは以下です。

python

1>>> import datetime 2>>> date_str = "2021年1月2日" 3>>> date_str2 = datetime.datetime.strptime(date_str, "%Y年%m月%d日").strftime("%Y%m%d") 4>>> print(date_str2) 520210102

投稿2021/02/16 17:08

ppaul

総合スコア24670

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

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

gmtt

2021/02/17 01:04

ppaul さん、早速のご回答ありがとうございます! なるほど、3行目の .strptime(date_str, "%Y年%m月%d日") と、文字列を "%Y年%m月%d日" という日付型に直すことが必要だったのですね。 そこで、さらに、 .strftime("%Y%m%d") を追加して、目的の型に直せるわけですね。 助かりました。ありがとうございます。
otn

2021/02/17 06:57

> 文字列を "%Y年%m月%d日" という日付型に直すこと 違いますよ。 strptime の機能を調べましょう。
gmtt

2021/02/17 08:11

違うんですか…。調べた限り、strptime は、文字列→日付 だと思うのですが、「日付型」という表記が駄目だということなんですかね。
ppaul

2021/02/17 08:46

otnさんが言っているのは、"%Y年%m月%d日"は文字列であり、それを日付型に直したものは、<class 'datetime.datetime'>のインスタンスで、datetime.datetime(2021, 1, 2, 0, 0)と表現するべきものだということです。
otn

2021/02/17 09:03

はい。「"%Y年%m月%d日" という日付型」というのが間違いです。
gmtt

2021/02/18 14:20

ppaul さん、ありがとうございます。時間はかかりましたが、ようやく理解することができました。
guest

0

date = "2021年1月2日" date = re.findall(r'\d+' , date) date = datetime.datetime(*(int(i) for i in date)) print(date.strftime("%Y%m%d"))

でどうでしょうか。

投稿2021/02/16 15:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gmtt

2021/02/17 01:26

qnoir さん、早速のご回答ありがとうございます! for i in date で、date というリストから数値を取り出していることはなんとなくわかるのですが、 *(int(i) for i in date) とすることで、どんなことがなされているのかを教えていただけないでしょうか。
退会済みユーザー

退会済みユーザー

2021/02/17 11:30 編集

(int(i) for i in date)は、リストdateの要素(文字列)をint型になおしてならべるジェネレータ式です。 先頭にアスタリスクを付けることで、ならべられたものを、アンパックしています。 私の能力が乏しく、分かりやすく説明できないので、「ジェネレータ式 python」 や「アンパック python」で検索してみてください。 なお、こんなことをせず、ppaulさんが回答されているやり方の方が断然おすすめです。
gmtt

2021/02/18 14:12

アンパックという用語で理解できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問