@@ -71,6 +71,8 @@ def wrapper(self, other):
71
71
other = _to_m8 (other )
72
72
elif isinstance (other , list ):
73
73
other = DatetimeIndex (other )
74
+ elif isinstance (other , basestring ):
75
+ other = _to_m8 (Timestamp (other , tz = self .tz ))
74
76
elif not isinstance (other , np .ndarray ):
75
77
other = _ensure_datetime64 (other )
76
78
result = func (other )
@@ -1042,34 +1044,36 @@ def _partial_date_slice(self, reso, parsed):
1042
1044
'time series.' )
1043
1045
1044
1046
if reso == 'year' :
1045
- t1 = Timestamp (datetime (parsed .year , 1 , 1 ))
1046
- t2 = Timestamp (datetime (parsed .year , 12 , 31 ))
1047
+ t1 = Timestamp (datetime (parsed .year , 1 , 1 ), tz = self . tz )
1048
+ t2 = Timestamp (datetime (parsed .year , 12 , 31 ), tz = self . tz )
1047
1049
elif reso == 'month' :
1048
1050
d = tslib .monthrange (parsed .year , parsed .month )[1 ]
1049
- t1 = Timestamp (datetime (parsed .year , parsed .month , 1 ))
1050
- t2 = Timestamp (datetime (parsed .year , parsed .month , d ))
1051
+ t1 = Timestamp (datetime (parsed .year , parsed .month , 1 ), tz = self . tz )
1052
+ t2 = Timestamp (datetime (parsed .year , parsed .month , d ), tz = self . tz )
1051
1053
elif reso == 'quarter' :
1052
1054
qe = (((parsed .month - 1 ) + 2 ) % 12 ) + 1 # two months ahead
1053
1055
d = tslib .monthrange (parsed .year , qe )[1 ] # at end of month
1054
- t1 = Timestamp (datetime (parsed .year , parsed .month , 1 ))
1055
- t2 = Timestamp (datetime (parsed .year , qe , d ))
1056
+ t1 = Timestamp (datetime (parsed .year , parsed .month , 1 ), tz = self . tz )
1057
+ t2 = Timestamp (datetime (parsed .year , qe , d ), tz = self . tz )
1056
1058
elif reso == 'day' and self ._resolution < Resolution .RESO_DAY :
1057
1059
st = datetime (parsed .year , parsed .month , parsed .day )
1058
- t1 = Timestamp (st )
1060
+ t1 = Timestamp (st , tz = self . tz )
1059
1061
t2 = st + offsets .Day ()
1060
- t2 = Timestamp (Timestamp (t2 ).value - 1 )
1062
+ t2 = Timestamp (Timestamp (t2 , tz = self . tz ).value - 1 )
1061
1063
elif (reso == 'hour' and
1062
1064
self ._resolution < Resolution .RESO_HR ):
1063
1065
st = datetime (parsed .year , parsed .month , parsed .day ,
1064
1066
hour = parsed .hour )
1065
- t1 = Timestamp (st )
1066
- t2 = Timestamp (Timestamp (st + offsets .Hour ()).value - 1 )
1067
+ t1 = Timestamp (st , tz = self .tz )
1068
+ t2 = Timestamp (Timestamp (st + offsets .Hour (),
1069
+ tz = self .tz ).value - 1 )
1067
1070
elif (reso == 'minute' and
1068
1071
self ._resolution < Resolution .RESO_MIN ):
1069
1072
st = datetime (parsed .year , parsed .month , parsed .day ,
1070
1073
hour = parsed .hour , minute = parsed .minute )
1071
- t1 = Timestamp (st )
1072
- t2 = Timestamp (Timestamp (st + offsets .Minute ()).value - 1 )
1074
+ t1 = Timestamp (st , tz = self .tz )
1075
+ t2 = Timestamp (Timestamp (st + offsets .Minute (),
1076
+ tz = self .tz ).value - 1 )
1073
1077
else :
1074
1078
raise KeyError
1075
1079
@@ -1091,7 +1095,6 @@ def get_value(self, series, key):
1091
1095
try :
1092
1096
return Index .get_value (self , series , key )
1093
1097
except KeyError :
1094
-
1095
1098
try :
1096
1099
loc = self ._get_string_slice (key )
1097
1100
return series [loc ]
@@ -1102,11 +1105,11 @@ def get_value(self, series, key):
1102
1105
locs = self .indexer_at_time (key )
1103
1106
return series .take (locs )
1104
1107
1105
- if isinstance (key , basestring ):
1106
- stamp = Timestamp (key , tz = self .tz )
1107
- else :
1108
- stamp = Timestamp (key )
1109
1108
try :
1109
+ if isinstance (key , basestring ):
1110
+ stamp = Timestamp (key , tz = self .tz )
1111
+ else :
1112
+ stamp = Timestamp (key )
1110
1113
return self ._engine .get_value (series , stamp )
1111
1114
except KeyError :
1112
1115
raise KeyError (stamp )
@@ -1131,15 +1134,18 @@ def get_loc(self, key):
1131
1134
return self .indexer_at_time (key )
1132
1135
1133
1136
try :
1134
- return self ._engine .get_loc (Timestamp (key ))
1137
+ if isinstance (key , basestring ):
1138
+ stamp = Timestamp (key , tz = self .tz )
1139
+ else :
1140
+ stamp = Timestamp (key )
1141
+ return self ._engine .get_loc (stamp )
1135
1142
except (KeyError , ValueError ):
1136
1143
raise KeyError (key )
1137
1144
1138
1145
def _get_string_slice (self , key ):
1139
1146
freq = getattr (self , 'freqstr' ,
1140
1147
getattr (self , 'inferred_freq' , None ))
1141
- asdt , parsed , reso = parse_time_string (key , freq )
1142
- key = asdt
1148
+ _ , parsed , reso = parse_time_string (key , freq )
1143
1149
loc = self ._partial_date_slice (reso , parsed )
1144
1150
return loc
1145
1151
@@ -1617,7 +1623,7 @@ def _to_m8(key):
1617
1623
'''
1618
1624
Timestamp-like => dt64
1619
1625
'''
1620
- if not isinstance (key , datetime ):
1626
+ if not isinstance (key , ( Timestamp , datetime ) ):
1621
1627
# this also converts strings
1622
1628
key = Timestamp (key )
1623
1629
0 commit comments