61 lines
2.8 KiB
Python
61 lines
2.8 KiB
Python
from datetime import datetime as dt
|
|
from datetime import timezone as tz # useful for dates before 1970 in windows
|
|
|
|
class date_class():
|
|
|
|
def __init__(self):
|
|
self.date_form()
|
|
self.time0 = 0
|
|
self.set_time0('01/01/1900')
|
|
|
|
def date_form(self, input_form = None, output_form = None): # it sets the datetime form used for functions that output date string and input date string
|
|
input_form = 'd/m/Y' if input_form is None else input_form
|
|
output_form = input_form if output_form is None else output_form
|
|
self.input_form = self.correct_form(input_form)
|
|
self.output_form = self.correct_form(output_form)
|
|
|
|
def set_time0(self, string, input_form = None): # the origin of time, useful for log scale not to hit the 0 timestamp
|
|
self.time0 = self.string_to_time(string, input_form, 0)
|
|
|
|
def today_datetime(self): # today in datetime form
|
|
return dt.today()
|
|
|
|
def today_string(self, output_form = None): # today in string form
|
|
return self.datetime_to_string(self.today_datetime(), output_form)
|
|
|
|
def datetime_to_string(self, datetime, output_form = None): # from datetime form to string form
|
|
output_form = self.output_form if output_form is None else self.correct_form(output_form)
|
|
return datetime.strftime(output_form)
|
|
|
|
def datetimes_to_strings(self, datetimes, output_form = None): # from datetime form to string form
|
|
return [self.datetime_to_string(el, output_form) for el in datetimes]
|
|
|
|
def string_to_datetime(self, string, input_form = None): # from date and times in string form to standard datetime input_form
|
|
input_form = self.input_form if input_form is None else self.correct_form(input_form)
|
|
return dt.strptime(string, input_form)
|
|
|
|
##############################################
|
|
############ Utilities ################
|
|
##############################################
|
|
|
|
def correct_form(self, date_form):
|
|
return ''.join(['%' + el if el.isalpha() else el for el in date_form])
|
|
|
|
def string_to_time(self, string, input_form = None, time0 = None):
|
|
input_form = self.input_form if input_form is None else self.correct_form(input_form)
|
|
time0 = self.time0 if time0 is None else time0
|
|
try:
|
|
return dt.strptime(string, input_form).replace(tzinfo = tz.utc).timestamp() - time0
|
|
except:
|
|
raise ValueError('Date Form should be: ' + input_form)
|
|
|
|
def strings_to_time(self, strings, input_form = None):
|
|
return [self.string_to_time(el, input_form) for el in strings]
|
|
|
|
def time_to_string(self, time, output_form = None):
|
|
return self.datetime_to_string(dt.fromtimestamp(time + self.time0), output_form)
|
|
|
|
def times_to_string(self, times, input_form = None):
|
|
return [self.time_to_string(el, input_form) for el in times]
|
|
|