python日付時間処理まとめ

5342 ワード

しばらくの間djangoでwebプロジェクトを開発し、pythonでプロジェクトを開発するのは初めてで、多くの関連知識点をまとめなければなりません.本稿で紹介したpythonの日付時間処理は最近使われたもので、皆さんに役に立つことを望んで、同時に自分のノートとして保存します.
Pythonはtime、calendar、datetimeなどのモジュールを提供し、日付と時間を処理します.よく使われているのはdatetimeモジュールです.
時間間隔は秒単位の浮動小数点数です.
各タイムスタンプは1970年1月1日の真夜中(暦)からどのくらいの時間が経過したかで表される.
pythonの日付書式設定記号:
  • %y 2桁の年表示(00-99)
  • %Y 4桁の年表示(000-9999)
  • %m月(01-12)
  • %d月内の1日(0-31)
  • %H 24時間制時間数(0-23)
  • %I 12時間制時間数(01-12)
  • %M分(00=59)
  • %S秒(00-59)
  • %aローカル簡略化曜日名
  • %Aローカルフルタイム名前
  • %bローカル簡略化月名
  • %Bローカル完全月名
  • %cローカル対応日付表示と時間表示
  • %j年間の1日(001-366)
  • %pローカルA.M.またはP.M.の等価子
  • %U 1年間の曜日(00-53)日曜日は曜日の開始
  • %w曜日(0-6)、日曜日は曜日の開始
  • %W 1年間の曜日(00-53)月曜日が週の始まり
  • %xローカル対応日付は
  • を表します.
  • %Xローカル対応時間表示
  • %Z現在タイムゾーンの名称
  • %%号自体
  • calendar
    カレンダーの取得
    #             year   ,3    ,     c
    calendar.calendar(2017)
    

    カレンダーの取得
    #   2017 11   
    >>> print calendar.month(2017, 11)
       November 2017
    Mo Tu We Th Fr Sa Su
           1  2  3  4  5
     6  7  8  9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30
    

    1週間の行のカレンダーを取得
    #   2017 11      
    >>> print calendar.monthcalendar(2017,11)
    [[0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 0, 0, 0]]
    

    取得日は曜日
    #   2017 11 11     (0-6         )
    >>> print calendar.weekday(2017,11,11)
    5
    

    datetime
    現在の日付時刻の取得
    #       (datetime  )
    >>> print datetime.datetime.now()
    2017-11-11 17:21:56.076882
    #       
    >>> print datetime.datetime.now().date()
    2017-11-11
    >>> print datetime.date.today()
    2017-11-11
    #           
    >>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    '2017-11-11 17:21:56'
    

    現在の日付の取得後数日/先日
    #     
    >>> print datetime.date.today() + datetime.timedelta(days=1)
    2017-11-12
    >>> print datetime.date.today() + datetime.timedelta(1)
    2017-11-12
    #     
    >>> print datetime.date.today() - datetime.timedelta(days=1)
    2017-11-10
    >>> print datetime.date.today() - datetime.timedelta(1)
    2017-11-10
    
    

    今週/今月末日および初日の取得
    >>> today = datetime.date.today()
    #        
    >>> print today - datetime.timedelta(today.weekday())
    2017-11-06
    #         
    >>> print today + datetime.timedelta(6-today.weekday())
    2017-11-12
    #        
    >>> print datetime.date(today.year, today.month, 1)
    2017-11-01
    #         
    >>> first_day_weekday, last_day_num = calendar.monthrange(today.year, today.month)
    >>> print datetime.date(today.year, today.month, last_day_num)
    2017-11-30
    

    当日の最小時間/最大時間を取得
    #         
    >>> print datetime.datetime.combine(datetime.date.today(), datetime.time.min)
    2017-11-11 00:00:00
    #         
    >>> print datetime.datetime.combine(datetime.date.today(), datetime.time.max)
    2017-11-11 23:59:59.999999
    

    time
    現在のタイムスタンプの取得
    >>> print time.time()
    1510396655.7
    

    ローカル時間の取得
    >>> print time.localtime(time.time())
    time.struct_time(tm_year=2017, tm_mon=11, tm_mday=11, tm_hour=18, tm_min=13, tm_sec=57, tm_wday=5, tm_yday=315, tm_isdst=0)
    

    フォーマット時間の取得
    #     %Y-%m-%d %H:%M:%S  
    >>> print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
    2017-11-11 18:58:39
    #     %a %b %d %H:%M:%S %Y  
    >>> print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) 
    Mon Nov 11 18:58:40 2017
    #             
    >>> format_time = time.strptime("2017-11-11 18:58:39", "%Y-%m-%d %H:%M:%S") 
    >>> print time.mktime(format_time)
    1510396712.0
    
    
    

    各時間フォーマット間の変換
  • datetime <=> date
    # datetime=> date
    >>> print datetime.datetime.now().date()
    2017-11-11
    # date => datetime
    >>> today = datetime.date.today()
    >>> print datetime.datetime.combine(today, datetime.time.min)
    2017-11-11 00:00:00
  • datetime <=> timestamp
    # datetime => timestamp
    >>> print time.mktime(datetime.datetime.now().timetuple())
    1510396755.0
    # timestamp => datetime
    >>> print datetime.datetime.fromtimestamp(1510396755.0)
    2017-11-11 18:39:15
  • datetime <=> string
    # datetime => string
    >>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    2017-11-11 18:39:15
    # string => datetime
    >>> print datetime.datetime.strptime("2017-11-11 18:39:15", "%Y-%m-%d %H:%M:%S")
    2017-11-11 18:39:15
  • datetime <=> timetuple
    # datetime => timetuple
    >>> print datetime.datetime.now().timetuple()
    time.struct_time(tm_year=2017, tm_mon=11, tm_mday=11, tm_hour=18, tm_min=50, tm_sec=57, tm_wday=5, tm_yday=315, tm_isdst=0)
    # timetuple => datetime
    >>> time_tuple = datetime.datetime.now().timetuple()
    >>> print datetime.datetime.fromtimestamp(time.mktime(time_tuple))
    2017-11-11 18:50:35