summaryrefslogtreecommitdiffstats
path: root/tests/datetime/test_getters.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/datetime/test_getters.py')
-rw-r--r--tests/datetime/test_getters.py248
1 files changed, 248 insertions, 0 deletions
diff --git a/tests/datetime/test_getters.py b/tests/datetime/test_getters.py
new file mode 100644
index 0000000..5074623
--- /dev/null
+++ b/tests/datetime/test_getters.py
@@ -0,0 +1,248 @@
+from __future__ import annotations
+
+import struct
+
+import pytest
+
+import pendulum
+
+from pendulum import DateTime
+from pendulum.tz import timezone
+from tests.conftest import assert_date
+from tests.conftest import assert_time
+
+
+def test_year():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.year == 1234
+
+
+def test_month():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.month == 5
+
+
+def test_day():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.day == 6
+
+
+def test_hour():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.hour == 7
+
+
+def test_minute():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.minute == 8
+
+
+def test_second():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.second == 9
+
+
+def test_microsecond():
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9)
+ assert d.microsecond == 0
+
+ d = pendulum.datetime(1234, 5, 6, 7, 8, 9, 101112)
+ assert d.microsecond == 101112
+
+
+def test_tzinfo():
+ d = pendulum.now()
+ assert d.tzinfo.name == timezone("America/Toronto").name
+
+
+def test_day_of_week():
+ d = pendulum.datetime(2012, 5, 7, 7, 8, 9)
+ assert d.day_of_week == pendulum.MONDAY
+
+
+def test_day_of_year():
+ d = pendulum.datetime(2012, 5, 7)
+ assert d.day_of_year == 128
+
+
+def test_days_in_month():
+ d = pendulum.datetime(2012, 5, 7)
+ assert d.days_in_month == 31
+
+
+def test_timestamp():
+ d = pendulum.datetime(1970, 1, 1, 0, 0, 0)
+ assert d.timestamp() == 0
+ assert d.add(minutes=1, microseconds=123456).timestamp() == 60.123456
+
+
+def test_float_timestamp():
+ d = pendulum.datetime(1970, 1, 1, 0, 0, 0, 123456)
+ assert d.float_timestamp == 0.123456
+
+
+def test_int_timestamp():
+ d = pendulum.datetime(1970, 1, 1, 0, 0, 0)
+ assert d.int_timestamp == 0
+ assert d.add(minutes=1, microseconds=123456).int_timestamp == 60
+
+
+@pytest.mark.skipif(
+ struct.calcsize("P") * 8 == 32, reason="Test only available for 64bit systems"
+)
+def test_int_timestamp_accuracy():
+ d = pendulum.datetime(3000, 10, 1, 12, 23, 10, 999999)
+
+ assert d.int_timestamp == 32527311790
+
+
+def test_timestamp_with_transition():
+ d_pre = pendulum.datetime(2012, 10, 28, 2, 0, tz="Europe/Warsaw", fold=0)
+ d_post = pendulum.datetime(2012, 10, 28, 2, 0, tz="Europe/Warsaw", fold=1)
+
+ # the difference between the timestamps before and after is equal to one hour
+ assert d_post.timestamp() - d_pre.timestamp() == pendulum.SECONDS_PER_HOUR
+ assert d_post.float_timestamp - d_pre.float_timestamp == (pendulum.SECONDS_PER_HOUR)
+ assert d_post.int_timestamp - d_pre.int_timestamp == pendulum.SECONDS_PER_HOUR
+
+
+def test_age():
+ d = pendulum.now()
+ assert d.age == 0
+ assert d.add(years=1).age == -1
+ assert d.subtract(years=1).age == 1
+
+
+def test_local():
+ assert pendulum.datetime(2012, 1, 1, tz="America/Toronto").is_local()
+ assert pendulum.datetime(2012, 1, 1, tz="America/New_York").is_local()
+ assert not pendulum.datetime(2012, 1, 1, tz="UTC").is_local()
+ assert not pendulum.datetime(2012, 1, 1, tz="Europe/London").is_local()
+
+
+def test_utc():
+ assert not pendulum.datetime(2012, 1, 1, tz="America/Toronto").is_utc()
+ assert not pendulum.datetime(2012, 1, 1, tz="Europe/Paris").is_utc()
+ assert pendulum.datetime(2012, 1, 1, tz="UTC").is_utc()
+ assert pendulum.datetime(2012, 1, 1, tz=0).is_utc()
+ assert not pendulum.datetime(2012, 1, 1, tz=5).is_utc()
+ # There is no time difference between Greenwich Mean Time and Coordinated Universal Time
+ assert pendulum.datetime(2012, 1, 1, tz="GMT").is_utc()
+
+
+def test_is_dst():
+ assert not pendulum.datetime(2012, 1, 1, tz="America/Toronto").is_dst()
+ assert pendulum.datetime(2012, 7, 1, tz="America/Toronto").is_dst()
+
+
+def test_offset_with_dst():
+ assert pendulum.datetime(2012, 1, 1, tz="America/Toronto").offset == -18000
+
+
+def test_offset_no_dst():
+ assert pendulum.datetime(2012, 6, 1, tz="America/Toronto").offset == -14400
+
+
+def test_offset_for_gmt():
+ assert pendulum.datetime(2012, 6, 1, tz="GMT").offset == 0
+
+
+def test_offset_hours_with_dst():
+ assert pendulum.datetime(2012, 1, 1, tz="America/Toronto").offset_hours == -5
+
+
+def test_offset_hours_no_dst():
+ assert pendulum.datetime(2012, 6, 1, tz="America/Toronto").offset_hours == -4
+
+
+def test_offset_hours_for_gmt():
+ assert pendulum.datetime(2012, 6, 1, tz="GMT").offset_hours == 0
+
+
+def test_offset_hours_float():
+ assert pendulum.datetime(2012, 6, 1, tz=9.5).offset_hours == 9.5
+
+
+def test_is_leap_year():
+ assert pendulum.datetime(2012, 1, 1).is_leap_year()
+ assert not pendulum.datetime(2011, 1, 1).is_leap_year()
+
+
+def test_is_long_year():
+ assert pendulum.datetime(2015, 1, 1).is_long_year()
+ assert not pendulum.datetime(2016, 1, 1).is_long_year()
+
+
+def test_week_of_month():
+ assert pendulum.datetime(2012, 9, 30).week_of_month == 5
+ assert pendulum.datetime(2012, 9, 28).week_of_month == 5
+ assert pendulum.datetime(2012, 9, 20).week_of_month == 4
+ assert pendulum.datetime(2012, 9, 8).week_of_month == 2
+ assert pendulum.datetime(2012, 9, 1).week_of_month == 1
+ assert pendulum.datetime(2020, 1, 1).week_of_month == 1
+ assert pendulum.datetime(2020, 1, 7).week_of_month == 2
+ assert pendulum.datetime(2020, 1, 14).week_of_month == 3
+
+
+def test_week_of_year_first_week():
+ assert pendulum.datetime(2012, 1, 1).week_of_year == 52
+ assert pendulum.datetime(2012, 1, 2).week_of_year == 1
+
+
+def test_week_of_year_last_week():
+ assert pendulum.datetime(2012, 12, 30).week_of_year == 52
+ assert pendulum.datetime(2012, 12, 31).week_of_year == 1
+
+
+def test_timezone():
+ d = pendulum.datetime(2000, 1, 1, tz="America/Toronto")
+ assert d.timezone.name == "America/Toronto"
+
+ d = pendulum.datetime(2000, 1, 1, tz=-5)
+ assert d.timezone.name == "-05:00"
+
+
+def test_tz():
+ d = pendulum.datetime(2000, 1, 1, tz="America/Toronto")
+ assert d.tz.name == "America/Toronto"
+
+ d = pendulum.datetime(2000, 1, 1, tz=-5)
+ assert d.tz.name == "-05:00"
+
+
+def test_timezone_name():
+ d = pendulum.datetime(2000, 1, 1, tz="America/Toronto")
+ assert d.timezone_name == "America/Toronto"
+
+ d = pendulum.datetime(2000, 1, 1, tz=-5)
+ assert d.timezone_name == "-05:00"
+
+
+def test_is_future():
+ with pendulum.travel_to(DateTime(2000, 1, 1)):
+ d = pendulum.now()
+ assert not d.is_future()
+ d = d.add(days=1)
+ assert d.is_future()
+
+
+def test_is_past():
+ with pendulum.travel_to(DateTime(2000, 1, 1), freeze=True):
+ d = pendulum.now()
+ assert not d.is_past()
+ d = d.subtract(days=1)
+ assert d.is_past()
+
+
+def test_date():
+ dt = pendulum.datetime(2016, 10, 20, 10, 40, 34, 123456)
+ d = dt.date()
+ assert isinstance(d, pendulum.Date)
+ assert_date(d, 2016, 10, 20)
+
+
+def test_time():
+ dt = pendulum.datetime(2016, 10, 20, 10, 40, 34, 123456)
+ t = dt.time()
+ assert isinstance(t, pendulum.Time)
+ assert_time(t, 10, 40, 34, 123456)