@@ -1276,52 +1276,64 @@ def _parsed_string_to_bounds(self, reso, parsed):
12761276 else :
12771277 target_tz = parsed .tzinfo
12781278
1279+ def translate (timestamp_lower , timestamp_upper ):
1280+ if target_tz == self .tz :
1281+ return timestamp_lower , timestamp_upper
1282+ else :
1283+ return (
1284+ timestamp_lower .tz_convert (self .tz ),
1285+ timestamp_upper .tz_convert (self .tz )
1286+ )
1287+
12791288 if reso == 'year' :
1280- return (Timestamp (datetime (parsed .year , 1 , 1 ), tz = target_tz ),
1289+ return translate (Timestamp (datetime (parsed .year , 1 , 1 ), tz = target_tz ),
12811290 Timestamp (datetime (parsed .year , 12 , 31 , 23 ,
12821291 59 , 59 , 999999 ), tz = target_tz ))
12831292 elif reso == 'month' :
12841293 d = libts .monthrange (parsed .year , parsed .month )[1 ]
1285- return (Timestamp (datetime (parsed .year , parsed .month , 1 ),
1294+ return translate (Timestamp (datetime (parsed .year , parsed .month , 1 ),
12861295 tz = target_tz ),
12871296 Timestamp (datetime (parsed .year , parsed .month , d , 23 ,
12881297 59 , 59 , 999999 ), target_tz ))
12891298 elif reso == 'quarter' :
12901299 qe = (((parsed .month - 1 ) + 2 ) % 12 ) + 1 # two months ahead
12911300 d = libts .monthrange (parsed .year , qe )[1 ] # at end of month
1292- return (Timestamp (datetime (parsed .year , parsed .month , 1 ),
1301+ return translate (Timestamp (datetime (parsed .year , parsed .month , 1 ),
12931302 tz = target_tz ),
12941303 Timestamp (datetime (parsed .year , qe , d , 23 , 59 ,
12951304 59 , 999999 ), tz = target_tz ))
12961305 elif reso == 'day' :
12971306 st = datetime (parsed .year , parsed .month , parsed .day )
1298- return (Timestamp (st , tz = target_tz ),
1307+ return translate (Timestamp (st , tz = target_tz ),
12991308 Timestamp (Timestamp (st + offsets .Day (),
13001309 tz = target_tz ).value - 1 ))
13011310 elif reso == 'hour' :
13021311 st = datetime (parsed .year , parsed .month , parsed .day ,
13031312 hour = parsed .hour )
1304- return (Timestamp (st , tz = target_tz ),
1313+ return translate (Timestamp (st , tz = target_tz ),
13051314 Timestamp (Timestamp (st + offsets .Hour (),
13061315 tz = target_tz ).value - 1 ))
13071316 elif reso == 'minute' :
13081317 st = datetime (parsed .year , parsed .month , parsed .day ,
13091318 hour = parsed .hour , minute = parsed .minute )
1310- return (Timestamp (st , tz = target_tz ),
1319+ return translate (Timestamp (st , tz = target_tz ),
13111320 Timestamp (Timestamp (st + offsets .Minute (),
13121321 tz = target_tz ).value - 1 ))
13131322 elif reso == 'second' :
13141323 st = datetime (parsed .year , parsed .month , parsed .day ,
13151324 hour = parsed .hour , minute = parsed .minute ,
13161325 second = parsed .second )
1317- return (Timestamp (st , tz = target_tz ),
1326+ return translate (Timestamp (st , tz = target_tz ),
13181327 Timestamp (Timestamp (st + offsets .Second (),
13191328 tz = target_tz ).value - 1 ))
13201329 elif reso == 'microsecond' :
13211330 st = datetime (parsed .year , parsed .month , parsed .day ,
13221331 parsed .hour , parsed .minute , parsed .second ,
13231332 parsed .microsecond )
1324- return (Timestamp (st , tz = target_tz ), Timestamp (st , tz = target_tz ))
1333+ return translate (
1334+ Timestamp (st , tz = target_tz ),
1335+ Timestamp (st , tz = target_tz )
1336+ )
13251337 else :
13261338 raise KeyError
13271339
0 commit comments