Skip to content

Commit dd5c58e

Browse files
authored
Merge pull request #597 from SAY-5/fix/truncate-datetime-date
fix: skip time truncation for date objects in truncate_datetime
2 parents 79e4379 + 31b92ea commit dd5c58e

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

deepdiff/helper.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,9 @@ def datetime_normalize(
690690
datetime.timezone, "BaseTzInfo"
691691
] = datetime.timezone.utc,
692692
) -> Any:
693-
if truncate_datetime:
693+
# A plain date has no time component, so truncation does not apply to it.
694+
has_time = not (isinstance(obj, datetime.date) and not isinstance(obj, datetime.datetime))
695+
if truncate_datetime and has_time:
694696
if truncate_datetime == 'second':
695697
obj = obj.replace(microsecond=0)
696698
elif truncate_datetime == 'minute':

tests/test_diff_other.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ def test_truncate_datetime(self):
7171
res = DeepDiff(d1, d2, truncate_datetime='second')
7272
assert res['values_changed']["root['a']"]['new_value'] == 80139
7373

74+
def test_truncate_datetime_with_date(self):
75+
d1 = {'a': datetime.date(2020, 5, 17)}
76+
d2 = {'a': datetime.date(2020, 5, 17)}
77+
assert DeepDiff(d1, d2, truncate_datetime='minute') == {}
78+
79+
d3 = {'a': datetime.date(2020, 5, 18)}
80+
res = DeepDiff(d1, d3, truncate_datetime='day')
81+
assert res['values_changed']["root['a']"]['new_value'] == datetime.date(2020, 5, 18)
82+
7483
def test_invalid_verbose_level(self):
7584
with pytest.raises(ValueError) as excinfo:
7685
DeepDiff(1, 2, verbose_level=5)

0 commit comments

Comments
 (0)