A package containing some simple tools to manage dates and times.
Project description
DateTimeTools
A package containing some simple tools to manage dates and times.
Installation
Install using pip3
:
pip3 install DateTimeTools --user
NOTE: This module uses a C++ backend, which is compiled with g++
under Linux (libdatetime.so) and Windows 10 (libdatetime.dll). This code has mostly been tested in Linux (Mint 20ish, CentOS 7) with a very brief test in Windows 10. The precompiled libraries may fail to load under other versions of both operating systems (definitely on Mac, or 32 bit OSes) - if so, then the module will attempt to recompile itself on the host system using g++
. If recompilation fails, please check that you have g++
installed - under Linux install GCC, under Windows install Mingw GCC (I used TDM-GCC, be sure to select g++
).
Usage
Converting between different date/time formats
Usually this package deals with integer dates in the format yyyymmdd
and floating point times in hours since the start of the day.
We can convert to a few different time formats:
import DateTimeTools as TT
Date = 20140102
ut = 15.0
#to unix time (seconds since 00:00 1970-01-01)
unixt = TT.UnixTime(Date,ut)
#and back
Date,ut = TT.UnixTimetoDate(unixt)
#to continuous time (hours since 00:00 1950-01-01)
utc = TT.ContUT(Date,ut)
#and back again
Date,ut = TT.contUTtoDate(utc)
#Julian day
jd = TT.JulDay(Date,ut)
#and back
Date,ut = TT.JulDaytoDate(jd)
#CDF Epoch (milliseconds since 00:00 0000-01-01)
cdfe = TT.CDFEpoch(Date,ut)
#and back
Date,ut = TT.CDFEpochtoDate(cdfe)
#get the python datetime
dt = TT.Datetime(Date,ut)
#or the reverse conversion
Date,ut = TT.DatetimetoDate(dt)
#convert hours since the start of the day to hours,minutes,seconds,milliseconds
hh,mm,ss,ms = TT.DectoHHMM(ut)
#and back
ut = TT.HHMMtoDec(hh,mm,ss,ms)
#Split dates into separate integers
yr,mn,dy = TT.DateSplit(Date)
#or the reverse
Date = TT.DateJoin(yr,mn,dy)
Formatted plot tick marks
The DTPlotLabel
function can be used to change the plot labels on the x-axis of a matplotlib.pyplot
plot such that they resemble human-readable times and dates.
For example:
import matplotlib.pyplot as plt
#some plot of a time series
#t is time either in unix time, ContUT, seconds from the start of the day
#or hours from the start of the day
plt.plot(t,x)
ax = plt.gca()
#if we are plotting with t = TT.ContUT(Date,ut)
#the function will be able to work out the date
#The TimeFMT keyword isn't needed here, by default = 'utc'
TT.DTPlotLabel(ax)
#similar to above - we can us unix time
#so t = TT.UnixTime(Date,ut)
#We must let the function know though
TT.DTPlotLabel(ax,TimeFMT='unix')
#With seconds from beginning of the day, we need to
#tell the function what Date starts at t == 0.0
#NOTE t can go beyond the range 0 < t < 24,
#the labels should include relevant dates
#Also, without the date keyword, just HH:MM(:SS) is shown
TT.DTPlotLabel(ax,TimeFMT='seconds',Date=20150101)
#Plotting with hours since the start of the day is similar
TT.DTPlotLabel(ax,TimeFMT='hours',Date=20190908)
Calculating time differences
#calculate the difference between two dates in days
ndays = TT.DateDifference(Date0,Date1)
#Similar to above, but include start and end times (still returns days)
ndays = TT.TimeDifference(Date0,ut0,Date1,ut1)
#We can find the middle time between two date/times
mDate,mut = TT.MidTime(Date0,ut0,Date1,ut1)
Filtering time series data
Given an evenly sampled time series, the lsfilter
function can perform low-pass and high-pass filtering.
#t is the evenly smapled time axis
#x is the time series data
#we need to know the sampling interval in seconds
inter = t[1] - t[0]
#we can do a low-pass filter, we need to set 'high = inter'
#and 'low = lsec' which is the cutoff period in seconds
xlow = TT.lsfilter(x,inter,lowsec,inter)
#alternatively a high-pass filter can be used by setting
#'high = hsec' (the cutoff period in seconds) and 'low = inter'
xhigh = TT.lsfilter(x,hsec,inter,inter)
Miscellaneous functions
#calculate day number and year
year,dayno = TT.DayNo(Date)
#or return to original date format
Date = TT.DayNotoDate(year,dayno)
#Check if year(s) are leap year(s)
ly = TT.LeapYear(year)
#Add one day to a date
NextDate = TT.PlusDay(Date)
#or go back a day
PrevDate = TT.MinusDay(Date)
#Calculate the nearest index in a time/date array
#to a test time/date
ind = TT.NearestTimeIndex(DateArray,utArray,testDate,testut)
#check which indices of a time array are within two time limits
inds = TT.WithinTimeRange(t,t0,t1)
#or including dates
inds = TT.WithinTimeRange((d,t),(d0,t0),(d1,t1))
#alternatively, return a boolean array where each True element is within the range
b = TT.WithinTimeRange((d,t),(d0,t0),(d1,t1),BoolOut=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for DateTimeTools-1.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1b8ba12aca401904dba41562eb6ab086335c1c47dc937446d7b326e580aa95e |
|
MD5 | 3c57190540a113152b203548b0280c4f |
|
BLAKE2b-256 | 3c1d94a8a28135fe259de2a2f5b443df283853722a6a37494fcef254aef9a580 |