Day19.python日時

Pythonの日時##

日時モジュールは日時処理専用です

一般的に使用される機能は次のとおりです。

datetime.now() & datetime.today()

import datetime
 print(datetime.datetime.now())
 
 # datetime.today()
 #2020- 09- 2123:13:05.245157 print(datetime.datetime.today())
 #2020-09-2123:13:57.062886

datetime.strptime()

print(datetime.datetime.strptime('2020/08/09',format('%Y/%m/%d')))
 #2020- 08- 0900:00:00 print(datetime.datetime.strptime('20-08-09',format('%y-%m-%d')))
 #2020-08-0900:00:00

datetime.strftime()

時刻のタプルを受け取り、読み取り可能な文字列で現地時間を返します。形式はパラメーターformatによって決定されます。

 dt = datetime.datetime.now()print("======================")print('時間:(%Y-%m-%d %H:%M:%S %f): ',dt.strftime('%Y-%m-%d %H:%M:%S %f'))print('時間:(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p'))print('今週の略語%%a: %s '% dt.strftime('%a'))print('1週間中%%A: %s '% dt.strftime('%A'))print('月の省略形%%b: %s '% dt.strftime('%b'))print('月間バッチ%%B: %s '% dt.strftime('%B'))print('日付時刻%%c: %s '% dt.strftime('%c'))print('今日は今週の最初です%s日'% dt.strftime('%w'))print('今日は今年の最初です%s日'% dt.strftime('%j'))print('今週は今年の最初です%s週'% dt.strftime('%U'))print('今日は月の最初です%s日'% dt.strftime('%d'))'''
 ====================== 時間:(%Y-%m-%d %H:%M:%S %f):2020-09-2123:30:51573645時間:(%Y-%m-%d %H:%M:%S %p):20-09-2111:30:51 PM
 今週の略語%a: Mon
 1週間中%A: Monday
 月の省略形%b: Sep
 月間バッチ%B: September
 日付時刻%c: Mon Sep 2123:30:512020
 今日は週の最初の日です
 今日は今年の265日目です
 今週は今年の38週目です
 今日はその月の21日です
 '''

日時の適用シナリオ##

1. 前書き###

コードを書くとき、それはしばしば時間、日付、そしてタイムスタンプの相互変換を伴います。

2. 例###

 # インポートモジュール
 import time, datetime

2.1 strタイプの日付はtimestamp ####に変換されます

 # 文字タイプ時間
 
 testStr ='2020-09-21 23:26:33'
 
 # 時間配列に変換する
 timeArray = time.strptime(testStr,"%Y-%m-%d %H:%M:%S")print(timeArray)
 
 # timeArrayはtmを呼び出すことができます_年など
 print(timeArray.tm_year)  # 2020
 
 # タイムスタンプに変換
 timeStamp =int(time.mktime(timeArray))print(timeStamp)  # 1600701993
 
 # 結果は次のとおりです。
 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=26, tm_sec=33, tm_wday=0, tm_yday=265, tm_isdst=-1)20201600701993

2.2 strタイプdate ####の表示形式を変更します

 testStr1 ="2020-09-21 23:40:00"
 # 配列に変換
 timeArray = time.strptime(testStr1,"%Y-%m-%d %H:%M:%S")
 # 他の表示形式に変換する
 otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)print(otherStyleTime)
 
 tss3 ="2020/09/21 23:40:00"
 timeArray = time.strptime(tss3,"%Y/%m/%d %H:%M:%S")
 otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)print(otherStyleTime)"""
 - - - - - - - - - - - - - - - - - - - - - - - 2020 /09/2123:40:002020-09-2123:40:00======================"""

2.3 タイムスタンプは、指定された形式の日付に変換されます####

 # 使用時間
 timeStamp =1600701993
 timeArray = time.localtime(timeStamp)
 otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)print(otherStyleTime)  # 2020--09--2123:26:33
 # 日時を使用する
 timeStamp =1600101993
 dateArray = datetime.datetime.fromtimestamp(timeStamp)
 otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime)  # 2020--09--1500:46:33
 # 日時を使用し、utc時間を指定すると、差は8時間になります
 timeStamp =1600201993
 dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
 otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime)  # 2020--09--1520:33:13

2.4 現在の時刻を取得し、指定された形式で表示します####

print("+++++++++++++++++++++++++++++++++++++++++++")
 # 現在のタイムスタンプを取得する時間
 now =int(time.time())     # 1533952277
 timeArray = time.localtime(now)print(timeArray)
 otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)print(otherStyleTime)
 
 # 結果は次のとおりです。
 """
 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=45, tm_sec=53, tm_wday=0, tm_yday=265, tm_isdst=0)2020--09--2123:45:53"""
 
 
 # 現在の時刻を取得するdatetime、配列形式
 now = datetime.datetime.now()print(now)
 otherStyleTime = now.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime)
 
 # 結果は次のとおりです。
 
 """
 2020-09-2123:45:53.5434872020--09--2123:45:53"""

日付機能時間モジュール機能##

ここで言及されている文字列は、一般的な意味での文字列ではありません。つまり、日付タイプのデータを読み取るときに、文字列が時間内に解析されていない場合、それは日付タイプではないということです。この時点での文字列は、タイムスタンプとどのように関連している必要がありますか。間で変換しますか?

一般的に使用される日付と時刻には、次の3つの形式があります。

  1. 秒単位の浮動小数点数
  2. struct_timeタプル
  3. タイムストリング
import time;  #タイムモジュールを紹介する
 ticks = time.time()print("現在のタイムスタンプは:", ticks)
 
 現在のタイムスタンプは:1600704429.9781017
秒単位の浮動小数点数は時間タプルに変換されます#####
 tm_struct = time.localtime(ticks)print(tm_struct)
 
 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=0, tm_min=8, tm_sec=2, tm_wday=1, tm_yday=266, tm_isdst=0)

グリニッジ平均時間を取得する必要がある場合は、** time.gmtime()関数**を使用できます。

 # グリニッジ標準時
 print(time.gmtime(ticks))
 
 
 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=16, tm_min=9, tm_sec=18, tm_wday=0, tm_yday=265, tm_isdst=0)
タイムタプルは秒単位の浮動小数点数に変換されます#####
print(time.mktime(tm_struct))1600704621.0
タイムタプルはタイムストリング#####に変換されます

多くの変換メソッドがありますが、最も単純なのは** asctime():**です。

 time_str = time.asctime( tm_struct )print(time_str)"""
 Tue Sep 2200:12:142020"""

フォーマットを正確に制御したい場合は、** strftime():**を使用できます。

 tm_1=time.strftime("%Y-%m-%d %H:%M:%S", tm_struct)
 tm_2=time.strftime("%a %b %d %H:%M:%S %Y", tm_struct)print(tm_1)print(tm_2)"""
 2020-09-2200:14:13
 Tue Sep 2200:14:132020"""
時間文字列は時間タプルに変換されます#####

関数** time.strptime()**はこの変換を完了することができます、以下は例です

 tm2_struct = time.strptime('2020-09-22 01:34:50',"%Y-%m-%d %H:%M:%S")print(tm2_struct)"""
 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=1, tm_min=34, tm_sec=50, tm_wday=1, tm_yday=266, tm_isdst=-1)"""
秒単位の浮動小数点数は時間文字列#####に変換されます

**time.ctime()は time.asctime()**に似ています。次の例を参照してください。

 tm_3=time.ctime(ticks)print(tm_3)"""
 Tue Sep 2200:17:542020"""
 # 出力文字列を正確に制御したい場合、既存の関数は見つかりませんでした。最初にタプルに変換してから、文字列にフォーマットすることしかできないと推定されています。
 # 私は変換関数を書きました:
 
 def time2str(ticks, fmt='%a %b %d %H:%M:%S %Y'):
  tm = time.localtime(ticks)return time.strftime(fmt, tm)
時間文字列は秒単位の浮動小数点数に変換されます#####
 def str2time(str, fmt='%a %b %d %H:%M:%S %Y'):
  tm = time.strptime(str, fmt)return time.mktime(tm)
 
 # こちらも参考機能です

宿題の練習

開始日と終了日に基づいて中間日を生成します##

**pandas.to_datetime *( arg 、 errors = 'raise' 、 utc = None 、 format = None 、 unit = None *)文字列を日付関数に変換します

 # 時間文字列形式を変換します。方法2:
 import pandas as pd
 start = pd.to_datetime("20200922")print("===================================")print(start)
 s=start.strftime('%Y-%m-%d') #日時を文字列に変換して使用する'%Y-%m-%d'フォーマット出力
 print(s)print("===================================")"""
 ==================================2020-09-2200:00:002020-09-22=================================="""

書き込み機能:

import time;  #タイムモジュールを紹介する
 from pandas import DatetimeIndex
 
 
 def date_range(cls, start=None, end=None, periods=None, freq=None, input_format=None, out_format=None):"""
  時系列を生成する
  : param start:シーケンス開始時間
  : param end:シーケンス終了時間,スタートが与えられたとき,終了時間には終了が含まれます
  : param periods: int,生成された時系列の長さ
  : param freq:時系列を生成するための時間間隔
  : param out_format:フォーマットされた文字列を出力するかどうか,出力の出力形式を指定します."%Y-%m-%d %H:%M:%S":param input_format:開始または終了が文字列であり、時刻形式を自動的に推測できない場合は、形式を指定する必要があります
  : return:[date or date_str]"""
 
 start = pd.to_datetime("20200918")
 end = pd.to_datetime("20200922")
 pd.date_range(start, end)DatetimeIndex(['2020-09-28','2020-09-29','2020-09-30','2020-09-13','2020-06-01','2020-06-02'])

例1:

 # 例1:
 dates =["20200912","20200922"]
 def create_dates(dates):"""
  : param dates:["20200912","20200922"]:return:"""
  start = pd.to_datetime(dates[0])
  end = pd.to_datetime(dates[1])
  dates = pd.date_range(start, end)  #時間文字列のリストを生成する
  dates = dates.strftime('%Y%m%d')   #時間データをフォーマットする
  returnlist(dates)print("例1")print(create_dates(dates))"""
 例1['20200912','20200913','20200914','20200915','20200916','20200917','20200918','20200919','20200920','20200921','20200922']"""

例2:

 # 例2
 
 df = pd.DataFrame({'year':[2019,2020],'month':[2,3],'day':[4,5]})
 pd.to_datetime(df)print("例2")print(pd.to_datetime(df))"""
 例202019-02-0412020-03-05
 dtype: datetime64[ns]"""

Recommended Posts

Day19.python日時