1- ../ ../ ../ dev / sesh - dash / dev / sesh / seshdash / utils / time_utils .py
1+ from datetime import datetime ,timedelta
2+ from dateutil .parser import parse
3+ from time import localtime ,strftime
4+ from django .conf import settings
5+ from pytz import timezone
6+ from django .utils import timezone as timezone_dt
7+ from tzwhere import tzwhere
8+
9+
10+ def get_epoch (tz = None ):
11+ """
12+ Return number of seconds since 1970-01-01- epoch
13+ """
14+ now = datetime .now ()
15+ if tz :
16+ tz = _clean_tz (tz )
17+ now = timezone_dt .now (tz )
18+ epoch = datetime (1970 ,1 ,1 )
19+ diff = now - epoch
20+ diff = str (diff .total_seconds ())
21+ diff_seconds = diff .split ('.' )
22+ diff_int = diff_seconds [0 ]
23+ return diff_int
24+
25+ def get_yesterday (tz = None ):
26+
27+ now = datetime .date (datetime .now ())
28+ if tz :
29+ tz = _clean_tz (tz )
30+ now = timezone_dt .now (tz )
31+
32+ one_day = timedelta (days = 1 )
33+ return now - one_day
34+
35+
36+ def get_time_interval_array (interval ,interval_type ,start ,end ,tz = None ):
37+ """
38+ Get an array between the provided time frame
39+ with slices in the given interval timedelta
40+ between start and end
41+ """
42+
43+ if tz :
44+ tz = _clean_tz (tz )
45+ timez = timezone (tz )
46+ else :
47+ timez = timezone (settings .TIME_ZONE )
48+ # TODO finish timezone implemenation
49+ result = []
50+ kwargs = {}
51+ kwargs [interval_type ] = interval
52+ interval = timedelta (** kwargs )
53+ while start < end :
54+ start = start + interval
55+ result .append (start )
56+
57+ return result
58+
59+ def get_epoch_from_datetime (date ):
60+ """
61+ Return number of seconds since 1970-01-01- epoch
62+ from given date
63+ @params: dateobject
64+ """
65+ epoch = datetime (1970 ,1 ,1 )
66+ if date .tzinfo :
67+ epoch = datetime (1970 ,1 ,1 ,tzinfo = date .tzinfo )
68+ diff = date - epoch
69+ seconds_only = str (diff .total_seconds ())
70+ seconds_only_str = seconds_only .split ('.' )
71+ seconds_only = seconds_only_str [0 ]
72+ return seconds_only
73+
74+ def get_epoch_from_date (year , month , day , hours , minutes , tz = None ):
75+ """
76+ Return number of seconds since 1970-01-01- epoch
77+ from given date
78+ @params: month,day,year,hours,minutes
79+ """
80+ date = datetime (year ,month ,day ,hours ,minutes )
81+ if tz :
82+ tz = _clean_tz (tz )
83+ date = datetime (year ,month ,day ,hours ,minutes ,tzinfo = tz )
84+
85+ epoch = datetime (1970 ,1 ,1 )
86+ diff = date - epoch
87+ return diff .total_seconds ()
88+
89+ def localize (nv_datetime ,tz ):
90+ """
91+ Add timezone info to datetime object
92+ """
93+ if not isinstance (nv_datetime ,datetime ):
94+ try :
95+ # Try to convert to datetime
96+ time = datetime (nv_datetime )
97+ except Exception , e :
98+ return nv_datetime
99+ # Is our datetime object naive?
100+ if nv_datetime .tzinfo is not None and nv_datetime .tzinfo .utcoffset (nv_datetime ) is not None :
101+ return nv_datetime
102+ localtz = timezone (tz )
103+ dt_aware = localtz .localize (nv_datetime )
104+ return dt_aware
105+
106+
107+ def epoch_to_date (seconds_time , tz = None ):
108+ """
109+ Translate seconds time to date
110+ """
111+ time = strftime ('%Y-%m-%d' ,localtime (seconds_time ))
112+ if tz :
113+ tz = _clean_tz (tz )
114+ time = localize (time ,tz )
115+
116+ return time
117+
118+ def get_timezone_from_geo (lat , lon ):
119+ """
120+ Return String TimeZone from provided lat,lon
121+ """
122+ tz = tzwhere .tzwhere ()
123+ return tz .tzNameAt (float (lat ), float (lon ))
124+
125+ def epoch_to_datetime (seconds_time , tz = None ):
126+ """
127+ Translate seconds time to datetime object
128+ """
129+ time = datetime .fromtimestamp (seconds_time )
130+
131+ if tz :
132+ tz = _clean_tz (tz )
133+ time = localize (time ,tz )
134+
135+
136+ #return strftime('%Y-%m-%dT%XZ',time)
137+ return time
138+
139+
140+ def get_last_five_days (from_date = "now" , tz = None ):
141+ """
142+ Get last days returned to you as datetime objects in array
143+ @params:
144+ from_date: (date to return consecutive days ongoing from) (optional)
145+ """
146+ days = []
147+
148+ now = datetime .now ()
149+ if not from_date == "now" :
150+ now = timezone .now ()
151+
152+ if not from_date == "now" :
153+ now = from_date
154+
155+ delta = now - timedelta (5 )
156+ for day in xrange (1 ,6 ):
157+ days .append (delta )
158+ delta = delta + timedelta (1 )
159+ return days
160+
161+
162+ def get_days_interval_delta (start , end , delta = 1 ):
163+
164+ """
165+ return the days inbetween the two sepcified dates
166+ @params:
167+ start: when is the interval stardate, datetime object
168+ end: when should the interval end , datatime object
169+ delta: increments in which to return dates, integer, default 1 day
170+ """
171+ delta = timedelta (days = delta )
172+ curr = start
173+ days = []
174+ while curr < end :
175+ days .append (curr )
176+ curr += delta
177+ return days
178+
179+ def get_start_end_date (days_ago , start_day ):
180+ """
181+ get the delta of days ago from given start date
182+ """
183+ delta = start_day - timedelta (days = days_ago )
184+ return delta
185+
186+ def get_timesince_seconds (time , tz = None ):
187+ """
188+ Get timesince and time provided
189+ """
190+ now = timezone_dt .now ()
191+ if tz :
192+ now = timezone (tz ).localize (datetime .now ())
193+
194+ #loc = timezone(settings.TIME_ZONE)
195+ #now = loc.localize(now)
196+ diff = now - time
197+ return int (diff .total_seconds ())
198+
199+ def get_timesince (time , tz = None ):
200+
201+ now = datetime .now ()
202+ if tz :
203+ tz = _clean_tz (tz )
204+ now = timezone_dt .now (tz )
205+
206+ loc = timezone (settings .TIME_ZONE )
207+ now = loc .localize (now )
208+ diff = now - time
209+ diff = format_timesince_seconds (int (diff .total_seconds ()))
210+ return diff
211+
212+ def format_timesince_seconds (seconds ):
213+ seconds = abs (seconds )
214+ if seconds < 60 :
215+ if seconds == 1 :
216+ return seconds , " second ago"
217+ else :
218+ return seconds , " seconds ago"
219+ elif seconds < 3600 :
220+ if seconds / 60 < 2 : # if it is still a minute
221+ return seconds / 60 , " minute ago"
222+ else :
223+ return seconds / 60 , " minutes ago"
224+ elif seconds < 86400 :
225+ if seconds / 3600 < 2 :
226+ return seconds / 3600 , " hour ago"
227+ else :
228+ return seconds / 3600 , " hours ago"
229+
230+ else :
231+ if seconds / 86400 < 2 :
232+ return seconds / 86400 , " day ago"
233+ else :
234+ return seconds / 86400 , " days ago"
235+
236+
237+ def get_date_dashed (date ):
238+ date_string = str (date .year ) + '-' + str (date .month ) + '-' + str (date .day )
239+ return date_string
240+
241+
242+ def convert_influx_time_string (date_string , tz = None ):
243+ """ Converts influx style strings to datetime """
244+ parsed = parse (date_string )
245+
246+ if tz :
247+ parsed = parsed .astimezone (timezone (tz ))
248+
249+ return parsed
250+
251+ def get_timesince_influx (date_string ):
252+ date_obj = convert_influx_time_string (date_string )
253+ return get_timesince (date_obj )
254+
255+ def _clean_tz (tz ):
256+ return tz .strip ().replace ('\' ' ,'' ).replace ('\" ' ,'' )
0 commit comments