memoring - datetime
Python標準ライブラリに含まれる。

クラス

主に以下のクラスがある。
datetime.date日付(年月日)
datetime.time時間(時分秒)
datetime.datetime日付+時間

オブジェクトの作成

  • コンストラクタ
day = datetime.date(year, month, day)  #年月日を整数で指定
daytime = datetime.datetime(year, month, day[, hour[, minute[, second]]]) #年月日と時刻を指定
  • メソッド
date/datetime.today()今日の日付
datetime.now()現在のローカルな時刻
datetime.utcnow()現在のUTCでの時刻
date/time/datetime.replace()year=やhour=のようにして特定の日付や時間を変更したオブジェクトを返す

文字列との変換

datetime→文字列

strftimeメソッドを使う。
date/time/datetime.strftime(format)指定したフォーマットで変換された文字列を返す。
書式指定はドキュメントを参照。主なものは
%Y西暦を4ケタで
%y西暦を下2ケタ
%m月を10進数表記
%b月を文字短縮表記
%B月を文字表記
%d日にちを10進数表記
%H時間を24時間式で10進数表記
%M分を10進数表記
%S秒を10進数表記
>>> date = datetime.datetime(1979,6,30)
>>> date.strftime('%Y-%m-%d %H:%M:%S')
'1979-06-30 00:00:00'

文字列→datetime

strptimeメソッドを使う。dateutil.parserクラスを使う方法もある。
>>> datetime.datetime.strptime('1979-06-01 00:00:00','%Y-%m-%d %H:%M:%S')
datetime.datetime(1979, 6, 1, 0, 0)

言語を変更する。

環境によってはstrftime()で%b等で英語表記にしようとすると日本語になってしまう。
import locale
locale.setlocale(locale.LC_ALL,'en_US')
でロケールを変更する。

(追記: 2013.4.26)
PCの使用可能なロケールに依存してしまうので、localeによる設定は汎用性がないかもしれないので、次のようなモジュールを作って利用するのがよさそう。
from datetime import datetime
from dateutil.relativedelta import relativedelta

__months__ = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
def d2s(d, fmt='%HZ%d%b%Y'):
    if not isinstance(d, datetime):
        raise TypeError, "input must be datetime.datetime obejct"
    fmt = fmt.replace('%b', __months__[d.month-1])
    if d.year < 1900:
        fmt = fmt.replace('%Y', '{:04d}'.format(d.year))
        d = d + relativedelta(year=1900)
    return d.strftime(fmt)                
関数d2sを呼び出して、
>>> d2s(datetime(2009,10,13,12))   
'12Z13OCT2009'     
>>> d2s(datetime(2009,10,13,12), fmt='%H:%MZ:%d%b%Y')    
'12:00Z13OCT2009'       

dateutilモジュール

標準ライブラリでは無いがdateutilを使うとdatetimeをより柔軟に扱うことができる。

文字列をdatetimeオブジェクトに変換する。

import dateutil.parser
date1 = dateutil.parser.parse('2010/6/30 23:15:22')
date2 = dateutil.parser.parse('2010-06-30')
date3 = dateutil.parser.parse('20100630')