diff --git a/swh/model/hypothesis_strategies.py b/swh/model/hypothesis_strategies.py
index 1940fa4432d9286fb3213857b2c18829f1e3c26b..d193852283d94e0c365a54dab64f37adda1315cd 100644
--- a/swh/model/hypothesis_strategies.py
+++ b/swh/model/hypothesis_strategies.py
@@ -6,6 +6,7 @@
 import datetime
 
 from hypothesis import assume
+from hypothesis.extra.dateutil import timezones
 from hypothesis.strategies import (
     binary,
     booleans,
@@ -70,6 +71,10 @@ def sha1():
     return binary(min_size=20, max_size=20)
 
 
+def aware_datetimes():
+    return datetimes(timezones=timezones())
+
+
 @composite
 def urls(draw):
     protocol = draw(sampled_from(["git", "http", "https", "deb"]))
@@ -138,7 +143,7 @@ def origin_visits_d():
         dict,
         visit=integers(0, 1000),
         origin=urls(),
-        date=datetimes(),
+        date=aware_datetimes(),
         status=sampled_from(["ongoing", "full", "partial"]),
         type=pgsql_text(),
         snapshot=optional(sha1_git()),
@@ -159,7 +164,7 @@ def origin_visit_statuses_d():
         visit=integers(0, 1000),
         origin=urls(),
         status=sampled_from(["ongoing", "full", "partial"]),
-        date=datetimes(),
+        date=aware_datetimes(),
         snapshot=optional(sha1_git()),
         metadata=one_of(none(), metadata_dicts()),
     )
@@ -268,7 +273,7 @@ def present_contents_d():
     return builds(
         dict,
         data=binary(max_size=4096),
-        ctime=optional(datetimes()),
+        ctime=optional(aware_datetimes()),
         status=one_of(just("visible"), just("hidden")),
     )
 
@@ -288,7 +293,7 @@ def skipped_contents_d(draw):
         result[k] = None
     result["reason"] = draw(pgsql_text())
     result["status"] = "absent"
-    result["ctime"] = draw(optional(datetimes()))
+    result["ctime"] = draw(optional(aware_datetimes()))
     return result
 
 
diff --git a/swh/model/tests/test_hypothesis_strategies.py b/swh/model/tests/test_hypothesis_strategies.py
index d3ac5ef42053e7e5c4dcc2760ec6e1147ae12962..2df2d7a21b48ad68f4fb425208c92a374fc19197 100644
--- a/swh/model/tests/test_hypothesis_strategies.py
+++ b/swh/model/tests/test_hypothesis_strategies.py
@@ -9,7 +9,14 @@ import attr
 from hypothesis import given, settings
 
 from swh.model.hashutil import DEFAULT_ALGORITHMS
-from swh.model.hypothesis_strategies import objects, object_dicts, snapshots
+from swh.model.hypothesis_strategies import (
+    objects,
+    object_dicts,
+    contents,
+    skipped_contents,
+    snapshots,
+    origin_visits,
+)
 from swh.model.model import TargetType
 
 
@@ -125,6 +132,16 @@ def test_model_to_dicts(obj_type_and_obj):
             assert branch is None or branch["target_type"] in target_types
 
 
+@given(contents())
+def test_content_aware_datetime(cont):
+    assert cont.ctime is None or cont.ctime.tzinfo is not None
+
+
+@given(skipped_contents())
+def test_skipped_content_aware_datetime(cont):
+    assert cont.ctime is None or cont.ctime.tzinfo is not None
+
+
 _min_snp_size = 10
 _max_snp_size = 100
 
@@ -164,3 +181,8 @@ def test_snapshots_strategy(snapshot):
 @settings(max_examples=1)
 def test_snapshots_strategy_fixed_size(snapshot):
     assert len(snapshot.branches) == _min_snp_size
+
+
+@given(origin_visits())
+def test_origin_visit_aware_datetime(visit):
+    assert visit.date.tzinfo is not None