web-dev-qa-db-ja.com

通常の形式で日付を印刷する方法

これは私のコードです:

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

この印刷物:2008-11-22これはまさに私が欲しいものです....私は私がこれに追加しているリストを持っています、そして突然突然すべてが "不愉快"になります。これがコードです:

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist

これは以下を印刷します。

[datetime.date(2008, 11, 22)]

どうやって私は "2008-11-22"のような単純なデートを手に入れることができますか?

594
NomadAlien

WHY:日付はオブジェクトです

Pythonでは、日付はオブジェクトです。したがって、それらを操作するときには、文字列ではなく、タイムスタンプやその他のものではなく、オブジェクトを操作します。

Pythonのオブジェクトはすべて2つの文字列表現を持ちます。

  • "print"によって使用される正規表現は、str()関数を使用して得ることができます。これはほとんどの場合、最も一般的な人間が読める形式であり、表示を簡単にするために使用されます。だからstr(datetime.datetime(2008, 11, 22, 19, 53, 42))はあなたに'2008-11-22 19:53:42'を与えます。

  • オブジェクトの性質を(データとして)表すために使用される代替表現。これはrepr()関数を使うことで得られますし、開発中またはデバッグ中にどのような種類のデータを操作しているのかを知るのに便利です。 repr(datetime.datetime(2008, 11, 22, 19, 53, 42))はあなたに'datetime.datetime(2008, 11, 22, 19, 53, 42)'を与えます。

起こったことは、 "print"を使って日付を印刷したとき、それはstr()を使ったので、あなたはNice日付文字列を見ることができました。しかし、mylistを印刷すると、オブジェクトのリストが印刷され、Pythonはrepr()を使用してデータセットを表現しようとしました。

How:どうしますか?

さて、あなたが日付を操作するとき、ずっとずっとずっと日付オブジェクトを使い続けなさい。彼らは何千もの便利なメソッドを手に入れ、そしてPython APIの大部分は日付がオブジェクトであることを期待しています。

それらを表示したいときは、str()を使ってください。 Pythonでは、すべてを明示的にキャストすることをお勧めします。それで、それが印刷する時が来たときだけ、str(date)を使ってあなたの日付の文字列表現を得てください。

最後に一つだけ。日付を印刷しようとすると、mylistを印刷しました。日付を印刷したい場合は、そのコンテナー(リスト)ではなく、日付オブジェクトを印刷する必要があります。

E.G、あなたはリストのすべての日付を印刷したいです。

for date in mylist :
    print str(date)

その特定のケースではであることに注意してください。printはあなたの代わりに使うので、str()を省略することさえできます。しかしそれは習慣になるべきではありません:-)

コードを使った実用的な場合

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22

# It's better to always use str() because :

print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22

print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects

print "This is a new day : " + str(mylist[0]) 
>>> This is a new day : 2008-11-22

高度な日付フォーマット

日付にはデフォルトの表現がありますが、特定のフォーマットでそれらを印刷することをお勧めします。その場合、strftime()メソッドを使ってカスタム文字列表現を得ることができます。

strftime()は日付のフォーマット方法を説明する文字列パターンを期待します。

E.G:

print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'

"%"の後の文字はすべて、何かの形式を表しています。

  • %dは日数です
  • %mは月数です
  • %bは月の省略形です
  • %yは年の末尾2桁です
  • %Yは一年中

公式ドキュメントを見てください または McCutchenのクイックリファレンス あなたはそれらすべてを知ることはできません。

PEP3101 以降、すべてのオブジェクトは、任意の文字列のメソッド形式によって自動的に使用される独自の形式を持つことができます。日時の場合、フォーマットはstrftimeで使用されているものと同じです。だからあなたはこのように上記と同じことができます:

print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'

このフォームの利点は他のオブジェクトも同時に変換できることです。
フォーマットされた文字列リテラル (Python 3.6、2016-12-23以降)の導入により、これは次のように書くことができます。

import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'

ローカライゼーション

正しい使い方をすれば、日付は自動的に現地の言語や文化に適応することができますが、少し複雑です。 SO(Stack Overflow)に関する別の質問があるかもしれません;-)

866
e-satis
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

編集:

Ceesの提案の後、私も時間を使い始めました:

import time
print time.strftime("%Y-%m-%d %H:%M")
295

Date、datetime、およびtimeオブジェクトはすべてstrftime(format)メソ​​ッドをサポートし、明示的なフォーマット文字列の制御下で時間を表す文字列を作成します。

以下は、フォーマットコードとその指示および意味のリストです。

    %a  Locale’s abbreviated weekday name.
    %A  Locale’s full weekday name.      
    %b  Locale’s abbreviated month name.     
    %B  Locale’s full month name.
    %c  Locale’s appropriate date and time representation.   
    %d  Day of the month as a decimal number [01,31].    
    %f  Microsecond as a decimal number [0,999999], zero-padded on the left
    %H  Hour (24-hour clock) as a decimal number [00,23].    
    %I  Hour (12-hour clock) as a decimal number [01,12].    
    %j  Day of the year as a decimal number [001,366].   
    %m  Month as a decimal number [01,12].   
    %M  Minute as a decimal number [00,59].      
    %p  Locale’s equivalent of either AM or PM.
    %S  Second as a decimal number [00,61].
    %U  Week number of the year (Sunday as the first day of the week)
    %w  Weekday as a decimal number [0(Sunday),6].   
    %W  Week number of the year (Monday as the first day of the week)
    %x  Locale’s appropriate date representation.    
    %X  Locale’s appropriate time representation.    
    %y  Year without century as a decimal number [00,99].    
    %Y  Year with century as a decimal number.   
    %z  UTC offset in the form +HHMM or -HHMM.
    %Z  Time zone name (empty string if the object is naive).    
    %%  A literal '%' character.

これがPythonのdatetimeとtimeモジュールでできることです。

    import time
    import datetime

    print "Time in seconds since the Epoch: %s" %time.time()
    print "Current date and time: " , datetime.datetime.now()
    print "Or like this: " ,datetime.datetime.now().strftime("%y-%m-%d-%H-%M")


    print "Current year: ", datetime.date.today().strftime("%Y")
    print "Month of year: ", datetime.date.today().strftime("%B")
    print "Week number of the year: ", datetime.date.today().strftime("%W")
    print "Weekday of the week: ", datetime.date.today().strftime("%w")
    print "Day of year: ", datetime.date.today().strftime("%j")
    print "Day of the month : ", datetime.date.today().strftime("%d")
    print "Day of week: ", datetime.date.today().strftime("%A")

それはこのようなものをプリントするでしょう:

    Time in seconds since the Epoch:    1349271346.46
    Current date and time:              2012-10-03 15:35:46.461491
    Or like this:                       12-10-03-15-35
    Current year:                       2012
    Month of year:                      October
    Week number of the year:            40
    Weekday of the week:                3
    Day of year:                        277
    Day of the month :                  03
    Day of week:                        Wednesday
140
Transformer

Date.strftimeを使用してください。フォーマット引数は ドキュメントに記載されています

これはあなたが望んでいたものです:

some_date.strftime('%Y-%m-%d')

これはロケールを考慮に入れます。 (これを行う)

some_date.strftime('%c')
69
Ali Afshar

これはもっと短いです。

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
31
Cees Timmerman
# convert date time to regular format.

d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)

# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)

出力

2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
24
Waqas Ali

あるいは

from datetime import datetime, date

"{:%d.%m.%Y}".format(datetime.now())

アウト:'25.12.2013

または

"{} - {:%d.%m.%Y}".format("Today", datetime.now())

アウト:「今日 - 2013年12月25日」

"{:%A}".format(date.today())

アウト:「水曜日」

'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())

アウト: '__main ____ 2014.06.09__16-56.log'

21
b1_

簡単な答え -

datetime.date.today().isoformat()
10
Flame of udun

datetime 文字列フォーマット( フォーマット文字列リテラル の中の nk9の答え using str.format() 。を参照)の場合:(Python 3.6、2016-12-23以降):

>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'

日付/時刻フォーマットディレクティブは フォーマット文字列構文 の一部としては文書化されていませんが、datedatetime、およびtimestrftime() ドキュメントには含まれていません。これらは1989 C規格に基づいていますが、Python 3.6以降のISO 8601指令をいくつか含んでいます。

7
handle

日付時刻オブジェクトを文字列に変換する必要があります。

次のコードは私のために働きました:

import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection

あなたがさらに援助が必要な場合は私に知らせてください。

3
Simon Johnson

できるよ:

mylist.append(str(today))
2
Igal Serban

私は便宜上あまりにも多くのモジュールをインポートするという考えが嫌いです。私はむしろ新しいモジュールをdatetimeと呼ぶよりもむしろこの場合timeである利用可能なモジュールを使って作業したいと思います。

>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
1
rickydj

あなたは文字列としてそれを追加することができますか?

import datetime 
mylist = [] 
today = str(datetime.date.today())
mylist.append(today) 
print mylist
1
HanClinto

ロケールベース日付が必要で、時間を含まない場合は、次を使用します。

some_date.strftime('%x')
>>> 07/11/2019
1
Liran H
from datetime import date
def time-format():
  return str(date.today())
print (time-format())

それがあなたが望むものであればこれは6-23-2018を印刷します:)

1
Erix

あなたが望んだことをするのに簡単な何かを頼んだという事実を考えると、あなたはただあなたがそうすることができました:

import datetime
str(datetime.date.today())
1
Ward Taya

print todayはあなたが望むものを返すので、これはtodayオブジェクトの__str__関数があなたが探している文字列を返すことを意味します。

それでmylist.append(today.__str__())もできます。

1
Ismail Elouafiq

私の答えに対する簡単な免責事項 - 私は約2週間だけPythonを学んできたので、私は決して専門家ではありません。したがって、私の説明は最善ではないかもしれず、私は間違った用語を使うかもしれません。とにかく、ここに行きます。

あなたのコードで、あなたがあなたの変数をtoday = datetime.date.today()と宣言した時、あなたはあなたの変数に組み込み関数の名前を付けることを選んだことに気づきました。

コードの次の行mylist.append(today)がリストを追加すると、単にdatetime.date.today()を追加するのではなく、以前にtoday変数の値として設定した文字列全体today()が追加されます。

Datetimeモジュールで作業するときに、ほとんどのコーダーが使用することはないかもしれませんが、簡単な解決策は、変数の名前を変更することです。

これが私が試したものです:

import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present

そしてそれはyyyy-mm-ddを出力します。

0
Mark S.

私は完全には理解していませんが、正しい形式で時刻を取得するためにpandasを使用できます。

>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>> 

そして:

>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']

しかし、それは文字列を格納していますが変換が簡単です:

>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]
0
U9-Forward

日付を(年/月/日)として表示する方法は次のとおりです。

from datetime import datetime
now = datetime.now()

print '%s/%s/%s' % (now.year, now.month, now.day)
0
Adrian Simon

簡単にするために easy_date を使うことができます。

import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
0
Raphael Amoedo