Skip to content

Commit 6532e76

Browse files
author
Marvin Kastner
committed
add translate function for converting time zones.
1 parent 69b517e commit 6532e76

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

pandas/core/indexes/datetimes.py

+20-8
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)