@@ -931,9 +931,7 @@ def signalsSelectRangeHandler(self, bot, chat_id):
931931 xmin_s , xmax_s = self .signals_range [chat_id ]
932932 xmin_s = dt .datetime .fromtimestamp (xmin_s ).strftime ("%d.%m.%Y %H:%M:%S" )
933933 xmax_s = dt .datetime .fromtimestamp (xmax_s ).strftime ("%d.%m.%Y %H:%M:%S" )
934- text = 'Hier kannst du einstellen, welchen Bereich ich darstellen soll.\n Gib dazu jetzt das Startdatum und Enddatum in folgendem Format ein: "' + \
935- dt .datetime .fromtimestamp (time .time ()- 1000 ).strftime ("%d.%m.%Y %H:%M:%S" ) + \
936- ' - ' + dt .datetime .fromtimestamp (time .time ()).strftime ("%d.%m.%Y %H:%M:%S" )+ '"'
934+ text = 'Hier kannst du einstellen, welchen Bereich ich darstellen soll.\n Wenn du nur ein Datum angibst, gehe ich davon aus, du willst die Daten ab diesem Zeitpunkt bis jetzt haben.\n Wenn du einen Zeitraum angeben willst, trenne zwei Zeitpunkte mit einem "-". Du musst keine Uhrzeit angeben.\n Beispiel: "16.05.19 - 13.06.19 14:33"'
937935 text += translate ('RTOC' , '\n Ausgew\xe4 hlter Zeitraum:\n {} - {}\n Verf\xfc gbarer Zeitraum:\n {} - {}\n ' ).format (xmin_s , xmax_s , xmin , xmax )
938936 commands = [translate ('RTOC' , 'Letzte Minute' ), translate ('RTOC' , 'Letzten 10 Minuten' ), translate ('RTOC' , 'Letzte Stunde' ), translate ('RTOC' , 'Letzte 24h' ), translate ('RTOC' , 'Letzte Woche' ), translate ('RTOC' , 'Letzter Monat' ), translate ('RTOC' , 'Alles' )]
939937 self .sendMenuMessage (bot , chat_id , commands , text )
@@ -964,56 +962,11 @@ def signalsSelectRangeHandlerAns(self, bot, chat_id, strung):
964962 xmin = self .logger .database .getGlobalXmin () - 100
965963 xmax = self .logger .database .getGlobalXmax () + 100
966964 else :
967- if len (strung .split ('-' )) == 2 :
968- times = strung .split ('-' )
969- while times [0 ].endswith (' ' ):
970- times [0 ] = times [0 ][0 :- 1 ]
971- while times [0 ].startswith (' ' ):
972- times [0 ] = times [0 ][1 :]
973- while times [1 ].endswith (' ' ):
974- times [1 ] = times [1 ][0 :- 1 ]
975- while times [0 ].startswith (' ' ):
976- times [1 ] = times [1 ][1 :]
977- foundXmin = False
978- foundXmax = False
979- for format in ['%d.%m.%Y %H:%M:%S' , '%d.%m %H:%M:%S' , '%d.%m %H:%M' , '%d.%m.%Y %H:%M' , '%d.%m.%Y' , '%d.%m' ]:
980- try :
981- xmin = dt .datetime .strptime (times [0 ], format ).timestamp ()
982- foundXmin = True
983- break
984- except Exception :
985- pass
986- for format in ['%d.%m.%Y %H:%M:%S' , '%d.%m %H:%M:%S' , '%d.%m %H:%M' , '%d.%m.%Y %H:%M' , '%d.%m.%Y' , '%d.%m' ]:
987- try :
988- xmax = dt .datetime .strptime (times [1 ], format ).timestamp ()
989- foundXmax = True
990- break
991- except Exception :
992- pass
993-
994- if not foundXmin or not foundXmax :
995- # print(traceback.format_exc())
996- self .send_message (chat_id = chat_id ,
997- text = translate ('RTOC' , 'Bitte sende mir einen Zeitraum, den ich verstehen kann:\n ' )+ '"' + dt .datetime .fromtimestamp (time .time ()- 1000 ).strftime ("%d.%m.%Y %H:%M:%S" )+ ' - ' + dt .datetime .fromtimestamp (time .time ()).strftime ("%d.%m.%Y %H:%M:%S" )+ '"' )
998- return
999- else :
1000- foundXmin = False
1001- while strung .endswith (' ' ):
1002- strung = strung [0 :- 1 ]
1003- while strung .startswith (' ' ):
1004- strung = strung [1 :]
1005- for format in ['%d.%m.%Y %H:%M:%S' , '%d.%m %H:%M:%S' , '%d.%m %H:%M' , '%d.%m.%Y %H:%M' , '%d.%m.%Y' , '%d.%m' ]:
1006- try :
1007- xmin = dt .datetime .strptime (strung , format ).timestamp ()
1008- xmax = time .time ()
1009- foundXmin = True
1010- break
1011- except Exception :
1012- pass
1013- if not foundXmin :
1014- self .send_message (chat_id = chat_id ,
1015- text = translate ('RTOC' , 'Bitte sende mir einen Zeitraum, den ich verstehen kann:\n ' )+ '"' + dt .datetime .fromtimestamp (time .time ()- 1000 ).strftime ("%d.%m.%Y %H:%M:%S" )+ ' - ' + dt .datetime .fromtimestamp (time .time ()).strftime ("%d.%m.%Y %H:%M:%S" )+ '"' )
1016- return
965+ found , xmin , xmax = _strToTimerange (strung )
966+ if not found :
967+ self .send_message (chat_id = chat_id ,
968+ text = translate ('RTOC' , 'Bitte sende mir einen Zeitraum, den ich verstehen kann.' ))
969+ return
1017970 self .signals_range [chat_id ] = [xmin , xmax ]
1018971 xmin = dt .datetime .fromtimestamp (xmin ).strftime ("%d.%m.%Y %H:%M:%S" )
1019972 xmax = dt .datetime .fromtimestamp (xmax ).strftime ("%d.%m.%Y %H:%M:%S" )
@@ -2030,3 +1983,52 @@ def executeUserAction(self, bot, chat_id, strung):
20301983 # Name angeben ...
20311984 #
20321985 # <--
1986+
1987+
1988+ def _strToTimestamp (datetimestr ):
1989+ while datetimestr .endswith (' ' ):
1990+ datetimestr = datetimestr [0 :- 1 ]
1991+ while datetimestr .startswith (' ' ):
1992+ datetimestr = datetimestr [1 :]
1993+ formats = []
1994+ dates = ['%d.%m.%Y' , '%d.%m' , '%m.%Y' , '%d.%m.%y' , '%m/%d' , '%m/%d/%y' ,
1995+ '%m/%d/%Y' , '%m-%d-%y' , '%m-%d-%Y' , '%d. %B %Y' , '%B %Y' ]
1996+ times = ['%H:%M:%S' , '%H:%M' ]
1997+
1998+ for d in dates :
1999+ formats += [d ]
2000+ for t in times :
2001+ formats += [t ]
2002+ formats += [d + ' ' + t ]
2003+ formats += [t + ' ' + d ]
2004+
2005+ for format in formats :
2006+ try :
2007+ ts = dt .datetime .strptime (datetimestr , format )
2008+ if 'y' not in format .lower ():
2009+ ts = ts .replace (year = 2019 )
2010+ ts = ts .timestamp ()
2011+
2012+ return True , ts
2013+ break
2014+ except Exception :
2015+ pass
2016+ return False , None
2017+
2018+
2019+ def _strToTimerange (rangestr ):
2020+ if len (rangestr .split ('-' )) == 2 :
2021+ times = rangestr .split ('-' )
2022+ foundXmin , xmin = _strToTimestamp (times [0 ])
2023+ foundXmax , xmax = _strToTimestamp (times [1 ])
2024+ if not foundXmin or not foundXmax :
2025+ return False , None , None
2026+ else :
2027+ return True , xmin , xmax
2028+ else :
2029+ xmax = time .time ()
2030+ foundXmin , xmin = _strToTimestamp (rangestr )
2031+ if not foundXmin :
2032+ return False , None , None
2033+ else :
2034+ return True , xmin , xmax
0 commit comments