@@ -1276,52 +1276,64 @@ def _parsed_string_to_bounds(self, reso, parsed):
1276
1276
else :
1277
1277
target_tz = parsed .tzinfo
1278
1278
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
+
1279
1288
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 ),
1281
1290
Timestamp (datetime (parsed .year , 12 , 31 , 23 ,
1282
1291
59 , 59 , 999999 ), tz = target_tz ))
1283
1292
elif reso == 'month' :
1284
1293
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 ),
1286
1295
tz = target_tz ),
1287
1296
Timestamp (datetime (parsed .year , parsed .month , d , 23 ,
1288
1297
59 , 59 , 999999 ), target_tz ))
1289
1298
elif reso == 'quarter' :
1290
1299
qe = (((parsed .month - 1 ) + 2 ) % 12 ) + 1 # two months ahead
1291
1300
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 ),
1293
1302
tz = target_tz ),
1294
1303
Timestamp (datetime (parsed .year , qe , d , 23 , 59 ,
1295
1304
59 , 999999 ), tz = target_tz ))
1296
1305
elif reso == 'day' :
1297
1306
st = datetime (parsed .year , parsed .month , parsed .day )
1298
- return (Timestamp (st , tz = target_tz ),
1307
+ return translate (Timestamp (st , tz = target_tz ),
1299
1308
Timestamp (Timestamp (st + offsets .Day (),
1300
1309
tz = target_tz ).value - 1 ))
1301
1310
elif reso == 'hour' :
1302
1311
st = datetime (parsed .year , parsed .month , parsed .day ,
1303
1312
hour = parsed .hour )
1304
- return (Timestamp (st , tz = target_tz ),
1313
+ return translate (Timestamp (st , tz = target_tz ),
1305
1314
Timestamp (Timestamp (st + offsets .Hour (),
1306
1315
tz = target_tz ).value - 1 ))
1307
1316
elif reso == 'minute' :
1308
1317
st = datetime (parsed .year , parsed .month , parsed .day ,
1309
1318
hour = parsed .hour , minute = parsed .minute )
1310
- return (Timestamp (st , tz = target_tz ),
1319
+ return translate (Timestamp (st , tz = target_tz ),
1311
1320
Timestamp (Timestamp (st + offsets .Minute (),
1312
1321
tz = target_tz ).value - 1 ))
1313
1322
elif reso == 'second' :
1314
1323
st = datetime (parsed .year , parsed .month , parsed .day ,
1315
1324
hour = parsed .hour , minute = parsed .minute ,
1316
1325
second = parsed .second )
1317
- return (Timestamp (st , tz = target_tz ),
1326
+ return translate (Timestamp (st , tz = target_tz ),
1318
1327
Timestamp (Timestamp (st + offsets .Second (),
1319
1328
tz = target_tz ).value - 1 ))
1320
1329
elif reso == 'microsecond' :
1321
1330
st = datetime (parsed .year , parsed .month , parsed .day ,
1322
1331
parsed .hour , parsed .minute , parsed .second ,
1323
1332
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
+ )
1325
1337
else :
1326
1338
raise KeyError
1327
1339
0 commit comments