Datetime Processing in Python

common datetime data structure:

int/float : a) timestamp, seconds since JAN 01 1970. (UTC), short for ts
      b) ordinal, days since JAN 01 0. short for to
datetime.datetime : short for t, datetime
string : printable datetime string(usually contains year,month,...seconds)

base imports

import time
from datetime import datetime, timedelta
import matplotlib.dates as dates

import pytz

from dateutil import rrule
from dateutil.parser import parse
# gen sample t
t = datetime.now() # prec:1e-6s
t = datetime.today()# same as above
t1 = datetime(2022,6,10,2,22,2) # from struct function
t2 = t + timedelta(seconds=-11)
ts = time.time() #prec:1e-7s
# ts >> to
to = ts.ordinal(t) #int
to = dates.date2num(t) #float
# datetime >> string
tstr = datetime.strftime(t, "%Y%m%d%H%M%S%f")
# string >> datetime, this is a class function
t = datetime.strptime(str, "%Y%m%d%H%M%S%f")
# datetime <> ts
ts = t.timestamp()
t = datetime.fromtimestamp(ts)
for tz in pytz.all_timezones:
    print(tz)
# generally use "Etc/GMT +n"即可
tstr = "2018-04-20 10:10:05"
t = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") 
ta = pytz.timezone("Etc/GMT+8").localize(t)
tb = ta.astimezone(pytz.timezone("Etc/GMT+8"))
#t.timestamp()==ta.==tb. this is a bug
t.strftime()==ta.strftime()!=tb.strftime()
# using pandas to gen sample t series
time_index = pd.date_range('06/06/2017', periods=100000, freq='30S')
# using rrule 
dtstr = "2022-06-10"
m1 = rrule.rrule(dtstart=parse(dtstr + " 09:31:00"), until=parse(dtstr + " 11:30:00"), freq=rrule.MINUTELY, interval=1, cache=True)
mms = list(m1)
## converts:

# timestring Series >> DateTime Series
tseries = pd.to_datetime(df["logtime"], format="%Y%m%d%H%M%S%f",unit='s',errors="coerce"))
# DateTime Series >> DateTimeIndex Series
index = pd.DatetimeIndex(tseries)

# set index
dataframe = pd.DataFrame(index=time_index) #set when Generated
df.set_index(index, inplace=True)
df.index.set_names(["dt"],inplace=True)

set matplotlib index