これ。
your_date.isoformat() # -> '2002-03-11'
your_date.strftime("%A %d. %B %Y") # -> Monday 11. March 2002
更新:1行でそれを行うにはリスト内包表記が必要です。
date_strings = [dt.strftime("%A %d. %B %Y") for dt in your_date_list]
または、forループを使用します。
date_strings = []
for dt in your_date_list:
date_str.append(dt.strftime("%A %d. %B %Y"))
更新2:これはあなたが期待するものに近いと私は信じていますが、それでもあなたが望むもの、あなただけがそれを知っています:あなたはいつ年を表示したいのですか、そうでないのですか?月や日だけを表示する場合など...しかし、これは基本的にはアイデアです。範囲を表すために、ある種のクラスを実行する必要があるかもしれません。そこでは、範囲間の月と年を比較して、そこで形式を選択できます...それが私が今思いついたものです。それが役に立てば幸い:
import datetime
# sample input
dates = [datetime.date(2012, 5, 21), datetime.date(2012, 5, 23),
datetime.date(2012, 5, 25), datetime.date(2012, 5, 19),
datetime.date(2012, 5, 17), datetime.date(2012, 5, 26),
datetime.date(2012, 5, 18), datetime.date(2012, 5, 20)]
def get_consecutive_ranges(dates):
dates = sorted(dates)
delta_1day = datetime.timedelta(days=1)
ranges = []
last_d = dates[0]
tmp_range = [last_d, None]
for d in dates[1:]:
if d-last_d <= delta_1day:
# the difference between the dates is less than a day
# we can extend the range, update the right-most boundary
tmp_range[1] = d
else:
ranges.append(tmp_range)
tmp_range = [d, None]
last_d = d
else:
ranges.append(tmp_range)
return ranges
ranges = get_consecutive_ranges(dates)
fmt = "%d %b %Y"
output = ", ".join([("%s" % (r[0].strftime(fmt),)) if r[1] is None else \
("%s-%s" % (r[0].strftime(fmt), r[1].strftime(fmt))) \
for r in ranges])
print output