diadia

興味があることをやってみる。自分のメモを残しておきます。

時間関係のオブジェクトを扱う

時間関係のモジュール

timeとdatetimeが存在する。また時間についてはエポックタイムという概念も存在する。

time

time.time()でエポックタイムを取得できる。
http://sweng.web.fc2.com/ja/program/python/time.html

datetime

今の時間をとる。それはdatetime.datetime.now()でできる。
datetime.datetime.now()をUNIX時間に変換するにはdatetimeオブジェクトのtimestampメソッドを使えば良い。

https://note.nkmk.me/python-unix-time-datetime/

 

import datetime
now = datetime.datetime.now()
now
# datetime.datetime(2019, 8, 10, 12, 8, 12, 636212)

now.timestamp()
# 1565406492.636212

これで636212を削除するにはどうすればよいのか?そこが疑問。

今のUNIX時間をとるにはどうすればいいのか?それはまずdatetimeの今の時間を取得する。その時間をtimestamp()メソッドを使うとエポックタイム(UNIX時間)に変換することができる。

 

エポックタイム

まだ詳しくはわからないが、エポックタイムはエポックタイムオブジェクトってのはないのか?time.time()で返されるのはミリ秒を含むfloat型データだし、int(time.time())はミリ秒を除くint型データである。これらはエポックタイムを表すので、datetime.datetime.fromstamp(floatかint型のエポックタイム)で成立する。

次気になるのはdatetime型データからどうstrデータに変換するか。datetimeオブジェクト.strftime(フォーマット)を使えば良い。

軽くまとめるとエポックタイムからデイトタイム型に変換してそれを文字列化するには以下の手順を踏む。

import time , datetime
now_u = time.time() #floatで取得 
now_u = int(now_u) #ミリ秒を削除してint型にした

now = datetime.datetime.fromtimestamp(now_u)
# datetime型に変換した

format = "%Y-%m-%d %H:%M:%S"
t = datetime.datetime.strftime(now, format)
#これで文字列に変換できた

t1 = datetime.datetime.strptime(t, format)
#datetimeオブジェクトに戻す


t1.timestamp()
#エポックに戻す
#再利用コード mytools/treat.py
import datetime, time

def change2datetime(timestamp):
    """
    UTC時間からdatetimeオブジェクトに変換する関数	
    time(timestamp) → datetime
    """    
    d = datetime.datetime.fromtimestamp(timestamp)
    return d


def change2d_str(d):
    """
    datetimeオブジェクトから文字列"2019-8-11 17:15:13"のような形に変換する関数
    datetime → str
    """
    dstr_format = "%Y-%m-%d %H:%M:%S"
    d_str = datetime.datetime.strftime(d, dstr_format)
    return d_str


def timestamp2dstr(timestamp):
    """
    UTC時間から時間を表す文字列に変換する関数
    timestamp → str
    """
    d = change_datetime(timestamp)
    d_str = change_d_str(d)
    return d_str


    
def get_rowlst():
    row_list = []
    with open("demo.csv", "r", encoding="utf-8") as f:
        reader = csv.reader(f)
        for row in reader:
            row_list.append(row)
    return row_list
    
def get_staytime(lst, index):
    if index == len(lst)-1:
        return print("finish")
    timestamp      = get_timestamp(lst[index])
    next_timestamp = get_timestamp(lst[index+1]) 
    staytime = int(next_timestamp) - int(timestamp)
    return staytime



def extract_data(stay_time=None,seconds=10):
    if stay_time != None and stay_time > seconds:
        return "EXTRACT"
    else:
        return "IGNORE"
        
def output_pdata(seconds=10):
	row_list = get_rowlst()
	for index,row in enumerate(row_list):
	    userid    = get_userid(row)
	    timestamp = get_timestamp(row)
	    date      = change_datetime(timestamp)
	    stay_time = get_staytime(row_list, index)
	    file_name = get_file_name(row)

	    
	    result = extract_data(stay_time=stay_time, seconds=950)
	    if result == "EXTRACT":
	        print(userid,timestamp,date,stay_time)
	        t = (userid, date, stay_time, file_name,)

	        cur.execute("""INSERT INTO registered (userid, date, stay_time, filename) VALUES (%s,%s,%s,%s)""", t)
	        conn.commit()

    conn.close()