@@ -30,6 +30,7 @@ from pandas._libs.tslibs.base cimport ABCTimestamp
30
30
from pandas._libs.tslibs.dtypes cimport (
31
31
abbrev_to_npy_unit,
32
32
get_supported_reso,
33
+ npy_unit_to_attrname,
33
34
periods_per_second,
34
35
)
35
36
from pandas._libs.tslibs.np_datetime cimport (
@@ -38,6 +39,7 @@ from pandas._libs.tslibs.np_datetime cimport (
38
39
NPY_FR_us,
39
40
check_dts_bounds,
40
41
convert_reso,
42
+ dts_to_iso_string,
41
43
get_conversion_factor,
42
44
get_datetime64_unit,
43
45
get_implementation_bounds,
@@ -214,8 +216,9 @@ cdef int64_t get_datetime64_nanos(object val, NPY_DATETIMEUNIT reso) except? -1:
214
216
try :
215
217
ival = npy_datetimestruct_to_datetime(reso, & dts)
216
218
except OverflowError as err:
219
+ attrname = npy_unit_to_attrname[reso]
217
220
raise OutOfBoundsDatetime(
218
- " Out of bounds nanosecond timestamp: {val}"
221
+ f " Out of bounds {attrname} timestamp: {val}"
219
222
) from err
220
223
221
224
return ival
@@ -248,8 +251,9 @@ cdef class _TSObject:
248
251
)
249
252
except OverflowError as err:
250
253
if val is not None :
254
+ attrname = npy_unit_to_attrname[creso]
251
255
raise OutOfBoundsDatetime(
252
- f" Out of bounds nanosecond timestamp: {val}"
256
+ f" Out of bounds {attrname} timestamp: {val}"
253
257
) from err
254
258
raise OutOfBoundsDatetime from err
255
259
@@ -419,7 +423,8 @@ cdef _TSObject convert_datetime_to_tsobject(
419
423
try :
420
424
obj.value = npy_datetimestruct_to_datetime(reso, & obj.dts)
421
425
except OverflowError as err:
422
- raise OutOfBoundsDatetime(" Out of bounds nanosecond timestamp" ) from err
426
+ attrname = npy_unit_to_attrname[reso]
427
+ raise OutOfBoundsDatetime(f" Out of bounds {attrname} timestamp" ) from err
423
428
424
429
if obj.tzinfo is not None and not is_utc(obj.tzinfo):
425
430
offset = get_utcoffset(obj.tzinfo, ts)
@@ -589,18 +594,18 @@ cdef check_overflows(_TSObject obj, NPY_DATETIMEUNIT reso=NPY_FR_ns):
589
594
if obj.dts.year == lb.year:
590
595
if not (obj.value < 0 ):
591
596
from pandas._libs.tslibs.timestamps import Timestamp
592
- fmt = (f " { obj.dts.year}-{obj.dts.month:02d}-{obj.dts.day:02d} "
593
- f " {obj.dts.hour:02d}:{obj.dts. min:02d}:{obj.dts.sec:02d} " )
597
+ fmt = dts_to_iso_string( & obj.dts)
598
+ min_ts = ( < _Timestamp > Timestamp( 0 ))._as_creso(reso). min
594
599
raise OutOfBoundsDatetime(
595
- f" Converting {fmt} underflows past {Timestamp.min }"
600
+ f" Converting {fmt} underflows past {min_ts }"
596
601
)
597
602
elif obj.dts.year == ub.year:
598
603
if not (obj.value > 0 ):
599
604
from pandas._libs.tslibs.timestamps import Timestamp
600
- fmt = (f " { obj.dts.year}-{obj.dts.month:02d}-{obj.dts.day:02d} "
601
- f " {obj.dts.hour:02d}:{obj.dts.min:02d}:{obj.dts.sec:02d} " )
605
+ fmt = dts_to_iso_string( & obj.dts)
606
+ max_ts = ( < _Timestamp > Timestamp( 0 ))._as_creso(reso).max
602
607
raise OutOfBoundsDatetime(
603
- f" Converting {fmt} overflows past {Timestamp.max }"
608
+ f" Converting {fmt} overflows past {max_ts }"
604
609
)
605
610
606
611
# ----------------------------------------------------------------------
0 commit comments