これは私のコードです:
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"のような単純なデートを手に入れることができますか?
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()
を使用してデータセットを表現しようとしました。
さて、あなたが日付を操作するとき、ずっとずっとずっと日付オブジェクトを使い続けなさい。彼らは何千もの便利なメソッドを手に入れ、そして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)に関する別の質問があるかもしれません;-)
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
編集:
Ceesの提案の後、私も時間を使い始めました:
import time
print time.strftime("%Y-%m-%d %H:%M")
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
Date.strftimeを使用してください。フォーマット引数は ドキュメントに記載されています 。
これはあなたが望んでいたものです:
some_date.strftime('%Y-%m-%d')
これはロケールを考慮に入れます。 (これを行う)
some_date.strftime('%c')
これはもっと短いです。
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
# 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
あるいは
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'
簡単な答え -
datetime.date.today().isoformat()
datetime
文字列フォーマット( フォーマット文字列リテラル の中の nk9の答え using str.format()
。を参照)の場合:(Python 3.6、2016-12-23以降):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'
日付/時刻フォーマットディレクティブは フォーマット文字列構文 の一部としては文書化されていませんが、date
、datetime
、およびtime
の strftime()
ドキュメントには含まれていません。これらは1989 C規格に基づいていますが、Python 3.6以降のISO 8601指令をいくつか含んでいます。
日付時刻オブジェクトを文字列に変換する必要があります。
次のコードは私のために働きました:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection
あなたがさらに援助が必要な場合は私に知らせてください。
できるよ:
mylist.append(str(today))
私は便宜上あまりにも多くのモジュールをインポートするという考えが嫌いです。私はむしろ新しいモジュールをdatetime
と呼ぶよりもむしろこの場合time
である利用可能なモジュールを使って作業したいと思います。
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
あなたは文字列としてそれを追加することができますか?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print mylist
ロケールベース日付が必要で、時間を含まない場合は、次を使用します。
some_date.strftime('%x')
>>> 07/11/2019
from datetime import date
def time-format():
return str(date.today())
print (time-format())
それがあなたが望むものであればこれは6-23-2018を印刷します:)
あなたが望んだことをするのに簡単な何かを頼んだという事実を考えると、あなたはただあなたがそうすることができました:
import datetime
str(datetime.date.today())
print today
はあなたが望むものを返すので、これはtodayオブジェクトの__str__
関数があなたが探している文字列を返すことを意味します。
それでmylist.append(today.__str__())
もできます。
私の答えに対する簡単な免責事項 - 私は約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
を出力します。
私は完全には理解していませんが、正しい形式で時刻を取得するために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')]
日付を(年/月/日)として表示する方法は次のとおりです。
from datetime import datetime
now = datetime.now()
print '%s/%s/%s' % (now.year, now.month, now.day)
簡単にするために easy_date を使うことができます。
import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')