@@ -2655,7 +2655,7 @@ def convert(self, values: np.ndarray, nan_rep, encoding: str, errors: str):
2655
2655
# reverse converts
2656
2656
if dtype .startswith ("datetime64" ):
2657
2657
# recreate with tz if indicated
2658
- converted = _set_tz (converted , tz )
2658
+ converted = _set_tz (converted , tz , dtype )
2659
2659
2660
2660
elif dtype == "timedelta64" :
2661
2661
converted = np .asarray (converted , dtype = "m8[ns]" )
@@ -3036,8 +3036,7 @@ def read_array(self, key: str, start: int | None = None, stop: int | None = None
3036
3036
if dtype and dtype .startswith ("datetime64" ):
3037
3037
# reconstruct a timezone if indicated
3038
3038
tz = getattr (attrs , "tz" , None )
3039
- # set time zone with parsed datetime64 unit
3040
- ret = _set_tz (ret , tz , unit = dtype .split ("[" )[1 ].strip ("]" ))
3039
+ ret = _set_tz (ret , tz , dtype )
3041
3040
3042
3041
elif dtype == "timedelta64" :
3043
3042
ret = np .asarray (ret , dtype = "m8[ns]" )
@@ -4966,7 +4965,7 @@ def _get_tz(tz: tzinfo) -> str | tzinfo:
4966
4965
4967
4966
4968
4967
def _set_tz (
4969
- values : npt .NDArray [np .int64 ], tz : str | tzinfo | None , unit : str = "ns"
4968
+ values : npt .NDArray [np .int64 ], tz : str | tzinfo | None , datetime64_dtype : str
4970
4969
) -> DatetimeArray :
4971
4970
"""
4972
4971
Coerce the values to a DatetimeArray with appropriate tz.
@@ -4975,11 +4974,12 @@ def _set_tz(
4975
4974
----------
4976
4975
values : ndarray[int64]
4977
4976
tz : str, tzinfo, or None
4978
- unit : str. The default unit is ns. Needs to be specified otherwise.
4977
+ datetime64_dtype : str, e.g. "datetime64[ns]", "datetime64[25s]"
4979
4978
"""
4980
4979
assert values .dtype == "i8" , values .dtype
4981
4980
# Argument "tz" to "tz_to_dtype" has incompatible type "str | tzinfo | None";
4982
4981
# expected "tzinfo"
4982
+ unit , _ = np .datetime_data (datetime64_dtype ) # parsing dtype: unit, count
4983
4983
dtype = tz_to_dtype (tz = tz , unit = unit ) # type: ignore[arg-type]
4984
4984
dta = DatetimeArray ._from_sequence (values , dtype = dtype )
4985
4985
return dta
0 commit comments