diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9ac153581..adcbd6bb2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,8 @@
 
 ### Enhancements
 - Added support for expandable datasets of references for untyped and compound data types. @stephprince [#1188](https://github.com/hdmf-dev/hdmf/pull/1188)
-- Improved html representation of data in `Containers` @h-mayorquin [#1100](https://github.com/hdmf-dev/hdmf/pull/1100)
+- Improved html representation of data in `Container` objects. @h-mayorquin [#1100](https://github.com/hdmf-dev/hdmf/pull/1100)
+- Added error when using colon for `Container` name. A colon cannot be used as a group name when writing to Zarr on Windows. @stephprince [#1202](https://github.com/hdmf-dev/hdmf/pull/1202)
 
 ### Bug fixes
 - Fixed inaccurate error message when validating reference data types. @stephprince [#1199](https://github.com/hdmf-dev/hdmf/pull/1199)
diff --git a/src/hdmf/container.py b/src/hdmf/container.py
index 4ee24ec2d..a61dc19e8 100644
--- a/src/hdmf/container.py
+++ b/src/hdmf/container.py
@@ -303,8 +303,8 @@ def __new__(cls, *args, **kwargs):
     @docval({'name': 'name', 'type': str, 'doc': 'the name of this container'})
     def __init__(self, **kwargs):
         name = getargs('name', kwargs)
-        if '/' in name:
-            raise ValueError("name '" + name + "' cannot contain '/'")
+        if ('/' in name or ':' in name) and not self._in_construct_mode:
+            raise ValueError(f"name '{name}' cannot contain a '/' or ':'")
         self.__name = name
         self.__field_values = dict()
         self.__read_io = None
diff --git a/tests/unit/test_container.py b/tests/unit/test_container.py
index 35d8e480c..c12247de7 100644
--- a/tests/unit/test_container.py
+++ b/tests/unit/test_container.py
@@ -180,6 +180,17 @@ def test_set_parent_overwrite_proxy(self):
     def test_slash_restriction(self):
         self.assertRaises(ValueError, Container, 'bad/name')
 
+        # check no error raised in construct mode
+        child_obj = Container.__new__(Container, in_construct_mode=True)
+        child_obj.__init__('bad/name')
+
+    def test_colon_restriction(self):
+        self.assertRaises(ValueError, Container, 'bad:name')
+
+        # check no error raised in construct mode
+        child_obj = Container.__new__(Container, in_construct_mode=True)
+        child_obj.__init__('bad:name')
+
     def test_set_modified_parent(self):
         """Test that set modified properly sets parent modified
         """