Skip to content

Commit

Permalink
Fix datetime calculations
Browse files Browse the repository at this point in the history
  • Loading branch information
fcurella committed Jan 21, 2025
1 parent 50c2baf commit 8fae42d
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions faker/providers/date_time/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@


def datetime_to_timestamp(dt: Union[dtdate, datetime]) -> int:
if isinstance(dt, datetime) and getattr(dt, "tzinfo", None) is not None:
if dt == datetime.min:
return timegm(dt.timetuple())
if isinstance(dt, datetime):
dt = dt.astimezone(tzutc())
return timegm(dt.timetuple())

Expand Down Expand Up @@ -1849,10 +1851,15 @@ def _get_reference_date_time(
If both are absolute, return the most recent one.
If both are None, return now.
"""

min_ = datetime_to_timestamp(datetime.min)
now = datetime.now(tzinfo)
if start_date is None and end_date is None:
return now
if start_date is None and end_date is not None:
start_date = now
elif start_date is not None and end_date is None:
end_date = now

start_int = cls._parse_date_time(start_date, now) if start_date is not None else min_
end_int = cls._parse_date_time(end_date, now) if end_date is not None else min_
Expand Down Expand Up @@ -1965,7 +1972,14 @@ def unix_time(
:example: 1061306726.6
"""
now = self._get_reference_date_time(start_datetime, end_datetime, tzinfo=None)
if start_datetime is not None and end_datetime is None:
if start_datetime == "now":
end_datetime = "+30d"
else:
end_datetime = datetime.now(tz=tzutc())
elif start_datetime is None and end_datetime is not None:
start_datetime = datetime(1970, 1, 1, tzinfo=tzutc())
now = self._get_reference_date_time(start_datetime, end_datetime, tzinfo=tzutc())
start_datetime = self._parse_start_datetime(now, start_datetime)
end_datetime = self._parse_end_datetime(now, end_datetime)
return float(self._rand_seconds(start_datetime, end_datetime))
Expand Down Expand Up @@ -2220,7 +2234,7 @@ def date_time_between_dates(
if tzinfo is None:
pick = convert_timestamp_to_datetime(timestamp, tzlocal())
try:
pick = pick.astimezone(tzutc()).replace(tzinfo=None)
pick = pick.replace(tzinfo=None)
except OSError:
pass
else:
Expand Down

0 comments on commit 8fae42d

Please sign in to comment.