Issue Description
There are some issues related to the way max values are handled (partially because of how python's datetime works) :
The way how Arrow calculates the max timestamp constant value also fails on Linux in constants.py :
_MAX_TIMESTAMP = datetime.max.timestamp()
Which will raise a ValueError in non-utc timezones (timestamp() ) will try to return a timestamp in the local timezone):
ValueError: year 10000 is out of range
Therefore I suggest making this more robust and replacing this with :
datetime.max.replace(tzinfo=timezone.utc).timestamp()
Which is more in line with python documentation : https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp
Using Arrow.max has its own issues , as
Arrow.utcfromtimestamp(Arrow.max.float_timestamp)
does not behave as expected and returns a date in 1978, due to normalize_timestamp (util) division by 1000 :
def normalize_timestamp(timestamp: float) -> float:
"""Normalize millisecond and microsecond timestamps into normal timestamps."""
if timestamp > MAX_TIMESTAMP:
if timestamp < MAX_TIMESTAMP_MS:
timestamp /= 1000
elif timestamp < MAX_TIMESTAMP_US:
timestamp /= 1_000_000
else:
raise ValueError(f"The specified timestamp {timestamp!r} is too large.")
return timestamp
System Info
- 🖥 OS name and version: Debian 11
- 🐍 Python version: 3.9.2
- 🏹 Arrow version: 1.2.2
Issue Description
There are some issues related to the way max values are handled (partially because of how python's datetime works) :
The way how Arrow calculates the max timestamp constant value also fails on Linux in constants.py :
_MAX_TIMESTAMP = datetime.max.timestamp()Which will raise a ValueError in non-utc timezones (timestamp() ) will try to return a timestamp in the local timezone):
ValueError: year 10000 is out of rangeTherefore I suggest making this more robust and replacing this with :
datetime.max.replace(tzinfo=timezone.utc).timestamp()Which is more in line with python documentation : https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp
Using
Arrow.maxhas its own issues , asArrow.utcfromtimestamp(Arrow.max.float_timestamp)does not behave as expected and returns a date in 1978, due to
normalize_timestamp(util) division by 1000 :System Info