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

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

ただいまの
回答率

88.78%

【Python】日付フォーマットについて

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 1,540

tokyo

score 34

タイトルの件、
下記のように「2019年04月05日(金)」という文字列から「yyyy-mm-dd」形式の文字列を取得したいのですが、ymd = の行でエラーとなってしまいます。
どこか書き方がおかしいでしょうか?
よろしくお願いいたします。

エラー内容
time data '2019年04月06日(金)' does not match format '%Y年%m月%d日(%a)'

inputYmd = "2019年04月05日(金)"

#ymdが"2019-04-05"になってほしい
ymd = datetime.datetime.strptime(inputYmd, '%Y年%m月%d日(%a)').strftime("%Y-%m-%d")
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

数字の一がきまってるのだから、parse せずに 部分文字列の切り取りで十分では?

>>> inputYmd = "2019年04月05日(金)"
>>> '{0}-{1}-{2}'.format(inputYmd[0:4], inputYmd[5:7], inputYmd[8:10])
'2019-04-05'
>>> 

参考情報

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

ロケールを設定していないことが原因かと思われます。
次のページを参考に修正してください。

Pythonで日付から曜日や月を文字列(日本語や英語など)で取得 | note.nkmk.me


あるいは曜日の情報を前以て切り落としても良いでしょう。
シンプルにやるなら、[:-3]で末尾三文字を取り除いてしまえば良いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/22 16:24

    ご回答ありがとうございます。
    いただいたページの通り
     import locale
     locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
    を入れてみましたが、
     locale.Error: unsupported locale setting
    のエラーが出ました。
    エラーメッセージで調べたところ、OSに対して(?)環境変数の設定が必要なようで、今回はLocaleの設定は回避することにしました。
    ※当方、Win10 64bitのDocker(OS:Ubuntu)コンテナ上でPythonを動かしています。

    もう一つご提供いただいていたシンプルにやる方法で試すと意図する値が取得できましたのでこちらで進めようと思います。ありがとうございました。
    ymd = datetime.datetime.strptime(inputYmd[:-3], '%Y年%m月%d日').strftime("%Y-%m-%d")

    キャンセル

0

print(datetime.datetime(2019, 4, 5).strftime("%Y年%m月%d日(%a)"))

でどう表示されますか?

%aはロケールに依存して決まるので、ロケールの設定がうまくいっていないと意図しないものになります。'2019年04月05日(Fri)'とか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/22 16:03

    ご回答ありがとうございます。
    2019年04月05日(Fri)
    と表示されました。ご回答いただいた全員の方がロケール設定が原因の旨おっしゃられているので一旦確認致します。

    キャンセル

  • 2019/04/22 16:28

    ご回答ありがとうございます。
    locale設定すると
     locale.Error: unsupported locale setting
    のエラーが出まして、、曜日を除いた文字列で処理するようにしました。

    ymd = datetime.datetime.strptime(inputYmd[:-3], '%Y年%m月%d日').strftime("%Y-%m-%d")

    キャンセル

0

おそらくロケールの問題です。

locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')

してあげると良いです。

普通に文字列分割したほうが早道な気はしますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/22 16:27

    ご回答ありがとうございます。
    locale設定すると
     locale.Error: unsupported locale setting
    のエラーが出まして、、曜日を除いた文字列で処理するようにしました。

    ymd = datetime.datetime.strptime(inputYmd[:-3], '%Y年%m月%d日').strftime("%Y-%m-%d")

    キャンセル

  • 2019/04/22 16:48

    なるほど、そうでしたか。フィードバックありがとうございます!

    キャンセル

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

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る