diff --git a/stix2/patterns.py b/stix2/patterns.py
index bbee7ac..f1472cd 100644
--- a/stix2/patterns.py
+++ b/stix2/patterns.py
@@ -227,7 +227,7 @@ def make_constant(value):
         return value
 
     try:
-        return parse_into_datetime(value)
+        return TimestampConstant(value)
     except (ValueError, TypeError):
         pass
 

diff --git a/stix2/test/v20/test_pattern_expressions.py b/stix2/test/v20/test_pattern_expressions.py
index fa9000e..526fe97 100644
--- a/stix2/test/v20/test_pattern_expressions.py
+++ b/stix2/test/v20/test_pattern_expressions.py
@@ -1,9 +1,11 @@
 import datetime
 
 import pytest
+import pytz
 
 import stix2
 from stix2.pattern_visitor import create_pattern_object
+import stix2.utils
 
 
 def test_create_comparison_expression():
@@ -482,6 +484,44 @@ def test_invalid_startstop_qualifier():
         )
 
 
+@pytest.mark.parametrize(
+    "input_, expected_class, expected_value", [
+        (1, stix2.patterns.IntegerConstant, 1),
+        (1.5, stix2.patterns.FloatConstant, 1.5),
+        ("abc", stix2.patterns.StringConstant, "abc"),
+        (True, stix2.patterns.BooleanConstant, True),
+        (
+            "2001-02-10T21:36:15Z", stix2.patterns.TimestampConstant,
+            stix2.utils.STIXdatetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+        ),
+        (
+            datetime.datetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+            stix2.patterns.TimestampConstant,
+            stix2.utils.STIXdatetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+        ),
+    ],
+)
+def test_make_constant_simple(input_, expected_class, expected_value):
+    const = stix2.patterns.make_constant(input_)
+
+    assert isinstance(const, expected_class)
+    assert const.value == expected_value
+
+
+def test_make_constant_list():
+    list_const = stix2.patterns.make_constant([1, 2, 3])
+
+    assert isinstance(list_const, stix2.patterns.ListConstant)
+    assert all(
+        isinstance(elt, stix2.patterns.IntegerConstant)
+        for elt in list_const.value
+    )
+    assert all(
+        int_const.value == test_elt
+        for int_const, test_elt in zip(list_const.value, [1, 2, 3])
+    )
+
+
 def test_make_constant_already_a_constant():
     str_const = stix2.StringConstant('Foo')
     result = stix2.patterns.make_constant(str_const)
diff --git a/stix2/test/v21/test_pattern_expressions.py b/stix2/test/v21/test_pattern_expressions.py
index ac6a439..58cef3e 100644
--- a/stix2/test/v21/test_pattern_expressions.py
+++ b/stix2/test/v21/test_pattern_expressions.py
@@ -1,10 +1,12 @@
 import datetime
 
 import pytest
+import pytz
 from stix2patterns.exceptions import ParseException
 
 import stix2
 from stix2.pattern_visitor import create_pattern_object
+import stix2.utils
 
 
 def test_create_comparison_expression():
@@ -603,6 +605,44 @@ def test_invalid_startstop_qualifier():
         )
 
 
+@pytest.mark.parametrize(
+    "input_, expected_class, expected_value", [
+        (1, stix2.patterns.IntegerConstant, 1),
+        (1.5, stix2.patterns.FloatConstant, 1.5),
+        ("abc", stix2.patterns.StringConstant, "abc"),
+        (True, stix2.patterns.BooleanConstant, True),
+        (
+            "2001-02-10T21:36:15Z", stix2.patterns.TimestampConstant,
+            stix2.utils.STIXdatetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+        ),
+        (
+            datetime.datetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+            stix2.patterns.TimestampConstant,
+            stix2.utils.STIXdatetime(2001, 2, 10, 21, 36, 15, tzinfo=pytz.utc),
+        ),
+    ],
+)
+def test_make_constant_simple(input_, expected_class, expected_value):
+    const = stix2.patterns.make_constant(input_)
+
+    assert isinstance(const, expected_class)
+    assert const.value == expected_value
+
+
+def test_make_constant_list():
+    list_const = stix2.patterns.make_constant([1, 2, 3])
+
+    assert isinstance(list_const, stix2.patterns.ListConstant)
+    assert all(
+        isinstance(elt, stix2.patterns.IntegerConstant)
+        for elt in list_const.value
+    )
+    assert all(
+        int_const.value == test_elt
+        for int_const, test_elt in zip(list_const.value, [1, 2, 3])
+    )
+
+
 def test_make_constant_already_a_constant():
     str_const = stix2.StringConstant('Foo')
     result = stix2.patterns.make_constant(str_const)

AST make_constant() function doesn't make timestamp constants
If make_constant() can interpret the passed value as a timestamp, it will return a STIXdatetime object instead of a timestamp constant.  That results in an incorrect AST and messed up pattern format.  E.g.

```python
import stix2.patterns

comp_expr = stix2.patterns.EqualityComparisonExpression("a:b", "1993-07-12T22:27:23Z")
print(comp_expr)
```

results in

```
a:b = 1993-07-12 22:27:23+00:00
```


stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[2001-02-10T21:36:15Z-TimestampConstant-expected_value4] stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[input_5-TimestampConstant-expected_value5] stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[2001-02-10T21:36:15Z-TimestampConstant-expected_value4] stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[input_5-TimestampConstant-expected_value5]
stix2/test/v20/test_pattern_expressions.py::test_create_comparison_expression stix2/test/v20/test_pattern_expressions.py::test_boolean_expression stix2/test/v20/test_pattern_expressions.py::test_boolean_expression_with_parentheses stix2/test/v20/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression_python_constant stix2/test/v20/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression stix2/test/v20/test_pattern_expressions.py::test_file_observable_expression stix2/test/v20/test_pattern_expressions.py::test_multiple_file_observable_expression[AndObservationExpression-AND] stix2/test/v20/test_pattern_expressions.py::test_multiple_file_observable_expression[OrObservationExpression-OR] stix2/test/v20/test_pattern_expressions.py::test_root_types stix2/test/v20/test_pattern_expressions.py::test_artifact_payload stix2/test/v20/test_pattern_expressions.py::test_greater_than_python_constant stix2/test/v20/test_pattern_expressions.py::test_greater_than stix2/test/v20/test_pattern_expressions.py::test_less_than stix2/test/v20/test_pattern_expressions.py::test_greater_than_or_equal stix2/test/v20/test_pattern_expressions.py::test_less_than_or_equal stix2/test/v20/test_pattern_expressions.py::test_not stix2/test/v20/test_pattern_expressions.py::test_and_observable_expression stix2/test/v20/test_pattern_expressions.py::test_invalid_and_observable_expression stix2/test/v20/test_pattern_expressions.py::test_hex stix2/test/v20/test_pattern_expressions.py::test_multiple_qualifiers stix2/test/v20/test_pattern_expressions.py::test_set_op stix2/test/v20/test_pattern_expressions.py::test_timestamp stix2/test/v20/test_pattern_expressions.py::test_boolean stix2/test/v20/test_pattern_expressions.py::test_binary stix2/test/v20/test_pattern_expressions.py::test_list stix2/test/v20/test_pattern_expressions.py::test_list2 stix2/test/v20/test_pattern_expressions.py::test_invalid_constant_type stix2/test/v20/test_pattern_expressions.py::test_invalid_integer_constant stix2/test/v20/test_pattern_expressions.py::test_invalid_float_constant stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[True-True0] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[False-False0] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[True-True1] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[False-False1] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[true-True] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[false-False] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[t-True] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[f-False] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[T-True] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[F-False] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[1-True] stix2/test/v20/test_pattern_expressions.py::test_boolean_constant[0-False] stix2/test/v20/test_pattern_expressions.py::test_invalid_boolean_constant stix2/test/v20/test_pattern_expressions.py::test_invalid_hash_constant[MD5-zzz] stix2/test/v20/test_pattern_expressions.py::test_invalid_hash_constant[ssdeep-zzz==] stix2/test/v20/test_pattern_expressions.py::test_invalid_hex_constant stix2/test/v20/test_pattern_expressions.py::test_invalid_binary_constant stix2/test/v20/test_pattern_expressions.py::test_escape_quotes_and_backslashes stix2/test/v20/test_pattern_expressions.py::test_like stix2/test/v20/test_pattern_expressions.py::test_issuperset stix2/test/v20/test_pattern_expressions.py::test_repeat_qualifier stix2/test/v20/test_pattern_expressions.py::test_invalid_repeat_qualifier stix2/test/v20/test_pattern_expressions.py::test_invalid_within_qualifier stix2/test/v20/test_pattern_expressions.py::test_startstop_qualifier stix2/test/v20/test_pattern_expressions.py::test_invalid_startstop_qualifier stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[1-IntegerConstant-1] stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[1.5-FloatConstant-1.5] stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[abc-StringConstant-abc] stix2/test/v20/test_pattern_expressions.py::test_make_constant_simple[True-BooleanConstant-True] stix2/test/v20/test_pattern_expressions.py::test_make_constant_list stix2/test/v20/test_pattern_expressions.py::test_make_constant_already_a_constant stix2/test/v20/test_pattern_expressions.py::test_parsing_comparison_expression stix2/test/v20/test_pattern_expressions.py::test_parsing_qualified_expression stix2/test/v20/test_pattern_expressions.py::test_parsing_start_stop_qualified_expression stix2/test/v20/test_pattern_expressions.py::test_parsing_mixed_boolean_expression_1 stix2/test/v20/test_pattern_expressions.py::test_parsing_mixed_boolean_expression_2 stix2/test/v20/test_pattern_expressions.py::test_parsing_integer_index stix2/test/v20/test_pattern_expressions.py::test_parsing_quoted_first_path_component stix2/test/v20/test_pattern_expressions.py::test_parsing_quoted_second_path_component stix2/test/v20/test_pattern_expressions.py::test_parsing_illegal_start_stop_qualified_expression stix2/test/v20/test_pattern_expressions.py::test_list_constant stix2/test/v21/test_pattern_expressions.py::test_create_comparison_expression stix2/test/v21/test_pattern_expressions.py::test_boolean_expression stix2/test/v21/test_pattern_expressions.py::test_boolean_expression_with_parentheses stix2/test/v21/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression_python_constant stix2/test/v21/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression stix2/test/v21/test_pattern_expressions.py::test_file_observable_expression stix2/test/v21/test_pattern_expressions.py::test_multiple_file_observable_expression[AndObservationExpression-AND] stix2/test/v21/test_pattern_expressions.py::test_multiple_file_observable_expression[OrObservationExpression-OR] stix2/test/v21/test_pattern_expressions.py::test_root_types stix2/test/v21/test_pattern_expressions.py::test_artifact_payload stix2/test/v21/test_pattern_expressions.py::test_greater_than_python_constant stix2/test/v21/test_pattern_expressions.py::test_greater_than stix2/test/v21/test_pattern_expressions.py::test_parsing_greater_than stix2/test/v21/test_pattern_expressions.py::test_less_than stix2/test/v21/test_pattern_expressions.py::test_parsing_less_than stix2/test/v21/test_pattern_expressions.py::test_greater_than_or_equal stix2/test/v21/test_pattern_expressions.py::test_parsing_greater_than_or_equal stix2/test/v21/test_pattern_expressions.py::test_less_than_or_equal stix2/test/v21/test_pattern_expressions.py::test_parsing_less_than_or_equal stix2/test/v21/test_pattern_expressions.py::test_parsing_issubset stix2/test/v21/test_pattern_expressions.py::test_parsing_issuperset stix2/test/v21/test_pattern_expressions.py::test_parsing_like stix2/test/v21/test_pattern_expressions.py::test_parsing_match stix2/test/v21/test_pattern_expressions.py::test_parsing_followed_by stix2/test/v21/test_pattern_expressions.py::test_not stix2/test/v21/test_pattern_expressions.py::test_and_observable_expression stix2/test/v21/test_pattern_expressions.py::test_parsing_and_observable_expression stix2/test/v21/test_pattern_expressions.py::test_or_observable_expression stix2/test/v21/test_pattern_expressions.py::test_parsing_or_observable_expression stix2/test/v21/test_pattern_expressions.py::test_invalid_and_observable_expression stix2/test/v21/test_pattern_expressions.py::test_hex stix2/test/v21/test_pattern_expressions.py::test_parsing_hex stix2/test/v21/test_pattern_expressions.py::test_multiple_qualifiers stix2/test/v21/test_pattern_expressions.py::test_set_op stix2/test/v21/test_pattern_expressions.py::test_timestamp stix2/test/v21/test_pattern_expressions.py::test_boolean stix2/test/v21/test_pattern_expressions.py::test_binary stix2/test/v21/test_pattern_expressions.py::test_parsing_binary stix2/test/v21/test_pattern_expressions.py::test_list stix2/test/v21/test_pattern_expressions.py::test_list2 stix2/test/v21/test_pattern_expressions.py::test_invalid_constant_type stix2/test/v21/test_pattern_expressions.py::test_invalid_integer_constant stix2/test/v21/test_pattern_expressions.py::test_invalid_timestamp_constant stix2/test/v21/test_pattern_expressions.py::test_invalid_float_constant stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[True-True0] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[False-False0] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[True-True1] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[False-False1] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[true-True] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[false-False] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[t-True] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[f-False] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[T-True] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[F-False] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[1-True] stix2/test/v21/test_pattern_expressions.py::test_boolean_constant[0-False] stix2/test/v21/test_pattern_expressions.py::test_invalid_boolean_constant stix2/test/v21/test_pattern_expressions.py::test_invalid_hash_constant[MD5-zzz] stix2/test/v21/test_pattern_expressions.py::test_invalid_hash_constant[SSDEEP-zzz==] stix2/test/v21/test_pattern_expressions.py::test_invalid_hex_constant stix2/test/v21/test_pattern_expressions.py::test_invalid_binary_constant stix2/test/v21/test_pattern_expressions.py::test_escape_quotes_and_backslashes stix2/test/v21/test_pattern_expressions.py::test_like stix2/test/v21/test_pattern_expressions.py::test_issuperset stix2/test/v21/test_pattern_expressions.py::test_repeat_qualifier stix2/test/v21/test_pattern_expressions.py::test_invalid_repeat_qualifier stix2/test/v21/test_pattern_expressions.py::test_invalid_within_qualifier stix2/test/v21/test_pattern_expressions.py::test_startstop_qualifier stix2/test/v21/test_pattern_expressions.py::test_invalid_startstop_qualifier stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[1-IntegerConstant-1] stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[1.5-FloatConstant-1.5] stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[abc-StringConstant-abc] stix2/test/v21/test_pattern_expressions.py::test_make_constant_simple[True-BooleanConstant-True] stix2/test/v21/test_pattern_expressions.py::test_make_constant_list stix2/test/v21/test_pattern_expressions.py::test_make_constant_already_a_constant stix2/test/v21/test_pattern_expressions.py::test_parsing_comparison_expression stix2/test/v21/test_pattern_expressions.py::test_parsing_repeat_and_within_qualified_expression stix2/test/v21/test_pattern_expressions.py::test_parsing_start_stop_qualified_expression stix2/test/v21/test_pattern_expressions.py::test_list_constant stix2/test/v21/test_pattern_expressions.py::test_parsing_boolean stix2/test/v21/test_pattern_expressions.py::test_parsing_mixed_boolean_expression_1 stix2/test/v21/test_pattern_expressions.py::test_parsing_mixed_boolean_expression_2 stix2/test/v21/test_pattern_expressions.py::test_parsing_integer_index stix2/test/v21/test_pattern_expressions.py::test_parsing_quoted_first_path_component stix2/test/v21/test_pattern_expressions.py::test_parsing_quoted_second_path_component stix2/test/v21/test_pattern_expressions.py::test_parsing_multiple_slashes_quotes stix2/test/v21/test_pattern_expressions.py::test_parse_error