mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-14 04:03:55 +00:00
Add datetime helpers to unify code
This commit is contained in:
parent
2477ef57f9
commit
6044bbb6b1
|
@ -1,2 +1,11 @@
|
||||||
from freqtrade.util.ft_precise import FtPrecise # noqa: F401
|
from freqtrade.util.datetime_helpers import dt_from_ts, dt_now
|
||||||
from freqtrade.util.periodic_cache import PeriodicCache # noqa: F401
|
from freqtrade.util.ft_precise import FtPrecise
|
||||||
|
from freqtrade.util.periodic_cache import PeriodicCache
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'dt_from_ts',
|
||||||
|
'dt_now',
|
||||||
|
'FtPrecise',
|
||||||
|
'PeriodicCache',
|
||||||
|
]
|
||||||
|
|
17
freqtrade/util/datetime_helpers.py
Normal file
17
freqtrade/util/datetime_helpers.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
|
||||||
|
def dt_now() -> datetime:
|
||||||
|
"""Return the current datetime in UTC."""
|
||||||
|
return datetime.now(timezone.utc)
|
||||||
|
|
||||||
|
|
||||||
|
def dt_from_ts(timestamp: float) -> datetime:
|
||||||
|
"""
|
||||||
|
Return a datetime from a timestamp.
|
||||||
|
:param timestamp: timestamp in seconds or milliseconds
|
||||||
|
"""
|
||||||
|
if timestamp > 1e10:
|
||||||
|
# Timezone in ms - convert to seconds
|
||||||
|
timestamp /= 1000
|
||||||
|
return datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
29
tests/utils/test_datetime_helpers.py
Normal file
29
tests/utils/test_datetime_helpers.py
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
from datetime import datetime, timedelta, timezone
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import time_machine
|
||||||
|
|
||||||
|
from freqtrade.util import dt_from_ts, dt_now
|
||||||
|
|
||||||
|
|
||||||
|
def test_dt_now():
|
||||||
|
with time_machine.travel("2021-09-01 05:01:00 +00:00", tick=False) as t:
|
||||||
|
now = datetime.now(timezone.utc)
|
||||||
|
assert dt_now() == now
|
||||||
|
|
||||||
|
t.shift(timedelta(hours=5))
|
||||||
|
assert dt_now() >= now
|
||||||
|
assert dt_now() == datetime.now(timezone.utc)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('as_ms', [True, False])
|
||||||
|
def test_dt_from_ts(as_ms):
|
||||||
|
multi = 1000 if as_ms else 1
|
||||||
|
assert dt_from_ts(1683244800.0 * multi) == datetime(2023, 5, 5, tzinfo=timezone.utc)
|
||||||
|
assert dt_from_ts(1683244800.5555 * multi) == datetime(2023, 5, 5, 0, 0, 0, 555500,
|
||||||
|
tzinfo=timezone.utc)
|
||||||
|
# As int
|
||||||
|
assert dt_from_ts(1683244800 * multi) == datetime(2023, 5, 5, tzinfo=timezone.utc)
|
||||||
|
# As milliseconds
|
||||||
|
assert dt_from_ts(1683244800 * multi) == datetime(2023, 5, 5, tzinfo=timezone.utc)
|
||||||
|
assert dt_from_ts(1683242400 * multi) == datetime(2023, 5, 4, 23, 20, tzinfo=timezone.utc)
|
Loading…
Reference in New Issue
Block a user