def firstofmonth(MmmYyyy):return datetime.datetime.strptime(MmmYyyy、 '%b-%Y')。date()
4
1
5 Answer
5
`strptime`はあなたに代わって文字列を日付に変換します:
def firstofmonth(MmmYyyy):return datetime.datetime.strptime(MmmYyyy、 '%b-%Y')。date()
トークナイズ、regexpをいじってみるよりはるかに良い、
月の最後の日の日付を取得するには、本当にcalendarモジュールを使うことができます。
def lastofmonth(MmmYyyy):first = firstofmonth(MmmYyyy)_、lastday = calendar.monthrange(first.year、first.month)を返す
例えば、ALMOSTの作業方法のように、datetimeだけできちんとそれを行うことができます。
def lastofmonth(MmmYyyy):first = firstofmonth(MmmYyyy)はfirst.replaceを返します(月= first.month 1、日= 1) - datetime.timedelta(days = 1)
しかし残念ながら、これは12月になります、そして12月を特別なケースにするのに必要とされるコードは全体的なアプローチをカレンダーが手に入れるよりも楽にします;-)
3
ここでダウンロードして読むことができるpython timeseriesモジュールの使用を強くお勧めします。
日付文字列を解析するには、dateutilパッケージも使用する必要があります。これは、次の場所にあります。
それからあなたはこのようなことをすることができます
import datetime import dateutil.parserインポートscikits.timeseries TSとしてm1 = TS.Date( 'M'、datetime = dateutil.parser.parse( 'Jan-2010'))m2 = TS.Date( 'M'、datetime = dateutil .parser.parse( 'Mar-2010'))d1 = m1.asfreq( 'D'、relation = 'START')#はTSを返します。dateオブジェクトd2 = m2.asfreq( 'D'、relation = 'END' ) firstDay = d1.datetime lastDay = d2.datetime
この解決策は外部のモジュールに依存していますが、非常に強力でよく書かれています。
2
日時からインポート日時、timedelta def first_day(some_date):some_date.replaceを返します(日= 1、時= 0、分= 0、秒= 0、マイクロ秒= 0) def next_month(some_date):first_dayを返す(first_day(some_date)timedelta(days = 31)) def last_day(some_date):next_month(some_date)を返す - timedelta(days = 1) #テスト: months = [( 'Jan-2010'、 'Mar-2010')、#あなたの例( 'Apr-2009'、 'Apr-2009')、#同じ月、30日( 'Jan-2008'、 'Dec- 2008 ')、#通年(' Jan-2007 '、' Feb-2007 ')]#2月が関与 date1、date2(月):print first_day(datetime.strptime(date1、 '%b-%Y'))、print ' - '、print last_day(datetime.strptime(date2、 '%b-%Y'))
それは印刷されます:
2010-01-01 00:00:00 - 2010-03-31 00:00:00 2009-04-01 00:00:00 - 2009-04-30 00:00:00 2008-01-01 00:00 :00 - 2008-12-31 00:00:00 2007-01-01 00:00:00 - 2007-02-28 00:00:00
1
私はそれが長い間過ぎ去ったことを知っている、しかし誰かが必要とするならば:
dateutilインポートルールからdateutilインポートパーサーfrom datetimeインポートdatetime first_day = parser.parse( 'Jan-2010'、デフォルト= datetime(1,1,1))last_day = rrule.rrule(rrule.MONTHLY、カウント= 1、bymonthday = -1、bysetpos = 1、dtstart =パーサー解析( '2010年3月'))
0
アレックスMartelliのをリフ:
import datetime def lastofmonthHelper(MmmYyyy):#日付の戻り値を取得します= 1) >>>範囲内の月(1,13)の場合: ... t = datetime.date(2009,month,1) ... print t, lastofmonthHelper(t) ... 2009-01-01 2009-01-31 2009-02-01 2009-02-28 2009-03-01 2009-03-31 2009-04-01 2009-04-30 2009-05-01 2009-05-31 2009-06-01 2009-06-30 2009-07-01 2009-07-31 2009-08-01 2009-08-31 2009-09-01 2009-09-30 2009-10-01 2009-10-31 2009-11-01 2009-11-30 2009-12-01 2009-12-31
あなたは月の初日、BTWを使う必要はありません。 私はこれをコメントに入れていたでしょうが、フォーマットがどのようになったのかは私たち全員が知っています。 Alexに自由に投票してください。
firstofmonth()呼び出しの結果を使用して呼び出すと、目的の結果が得られます。
>>> lastofmonthHelper(firstofmonth( 'Apr-2009'))datetime.date(2009、4、30)