-1

私は実際にこの質問の反対を探しています: Converting string into datetime

datetime オブジェクトのリストがあり、それらから人間にわかりやすい文字列を作成したいと考えています。たとえば、「2012 年 1 月 27 日と 30 日、2 月 4 日」などです。何か案は?

strftime は単一の datetime オブジェクトでのみ機能することに注意してください。ここでの問題は、等間隔ではない可能性があり、月または年の境界をまたぐ可能性がある datetime のリストがあることですが、日付の範囲全体を 1 つの簡潔な文字列で表現する必要があります。

4

2 に答える 2

7

これ

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
于 2012-05-15T21:51:54.013 に答える
1
>>> dt=datetime.date(2012,2,4)
>>> dt.strftime('%A %B %d, %Y')
'Saturday February 04, 2012'
于 2012-05-16T01:38:48.817 に答える