diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 76e57ed268..f8d6aad0e8 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -21,6 +21,7 @@ import io
 import logging
 import os
 
+import iso8601
 from novaclient import api_versions
 from novaclient.v2 import servers
 from openstack import exceptions as sdk_exceptions
@@ -29,7 +30,6 @@ from osc_lib.cli import parseractions
 from osc_lib.command import command
 from osc_lib import exceptions
 from osc_lib import utils
-from oslo_utils import timeutils
 
 from openstackclient.i18n import _
 from openstackclient.identity import common as identity_common
@@ -1455,8 +1455,8 @@ class ListServer(command.Lister):
                 raise exceptions.CommandError(msg)
 
             try:
-                timeutils.parse_isotime(search_opts['changes-before'])
-            except ValueError:
+                iso8601.parse_date(search_opts['changes-before'])
+            except (TypeError, iso8601.ParseError):
                 raise exceptions.CommandError(
                     _('Invalid changes-before value: %s') %
                     search_opts['changes-before']
@@ -1464,8 +1464,8 @@ class ListServer(command.Lister):
 
         if search_opts['changes-since']:
             try:
-                timeutils.parse_isotime(search_opts['changes-since'])
-            except ValueError:
+                iso8601.parse_date(search_opts['changes-since'])
+            except (TypeError, iso8601.ParseError):
                 raise exceptions.CommandError(
                     _('Invalid changes-since value: %s') %
                     search_opts['changes-since']
diff --git a/openstackclient/compute/v2/server_backup.py b/openstackclient/compute/v2/server_backup.py
index a5d43fc6f8..b1b821b24e 100644
--- a/openstackclient/compute/v2/server_backup.py
+++ b/openstackclient/compute/v2/server_backup.py
@@ -15,10 +15,11 @@
 
 """Compute v2 Server action implementations"""
 
+import importlib
+
 from osc_lib.command import command
 from osc_lib import exceptions
 from osc_lib import utils
-from oslo_utils import importutils
 
 from openstackclient.i18n import _
 
@@ -119,7 +120,7 @@ class CreateServerBackup(command.ShowOne):
             info['properties'] = utils.format_dict(info.get('properties', {}))
         else:
             # Get the right image module to format the output
-            image_module = importutils.import_module(
+            image_module = importlib.import_module(
                 self.IMAGE_API_VERSIONS[
                     self.app.client_manager._api_version['image']
                 ]
diff --git a/openstackclient/compute/v2/server_image.py b/openstackclient/compute/v2/server_image.py
index fea87af81f..c12bc2b3ae 100644
--- a/openstackclient/compute/v2/server_image.py
+++ b/openstackclient/compute/v2/server_image.py
@@ -15,12 +15,12 @@
 
 """Compute v2 Server action implementations"""
 
+import importlib
 import logging
 
 from osc_lib.command import command
 from osc_lib import exceptions
 from osc_lib import utils
-from oslo_utils import importutils
 
 from openstackclient.i18n import _
 
@@ -99,7 +99,7 @@ class CreateServerImage(command.ShowOne):
             info['properties'] = utils.format_dict(info.get('properties', {}))
         else:
             # Get the right image module to format the output
-            image_module = importutils.import_module(
+            image_module = importlib.import_module(
                 self.IMAGE_API_VERSIONS[
                     self.app.client_manager._api_version['image']
                 ]
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 8f8a33acc4..a9f72cf6da 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -19,11 +19,11 @@ import getpass
 from unittest import mock
 from unittest.mock import call
 
+import iso8601
 from novaclient import api_versions
 from openstack import exceptions as sdk_exceptions
 from osc_lib import exceptions
 from osc_lib import utils as common_utils
-from oslo_utils import timeutils
 
 from openstackclient.compute.v2 import server
 from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
@@ -3086,7 +3086,7 @@ class TestServerList(TestServer):
         self.assertEqual(self.columns, columns)
         self.assertEqual(tuple(self.data), tuple(data))
 
-    @mock.patch.object(timeutils, 'parse_isotime', side_effect=ValueError)
+    @mock.patch.object(iso8601, 'parse_date', side_effect=iso8601.ParseError)
     def test_server_list_with_invalid_changes_since(self, mock_parse_isotime):
 
         arglist = [
@@ -3129,7 +3129,7 @@ class TestServerList(TestServer):
         self.assertEqual(self.columns, columns)
         self.assertEqual(tuple(self.data), tuple(data))
 
-    @mock.patch.object(timeutils, 'parse_isotime', side_effect=ValueError)
+    @mock.patch.object(iso8601, 'parse_date', side_effect=iso8601.ParseError)
     def test_server_list_v266_with_invalid_changes_before(
             self, mock_parse_isotime):
         self.app.client_manager.compute.api_version = (
diff --git a/openstackclient/tests/unit/test_shell.py b/openstackclient/tests/unit/test_shell.py
index 94f4f44d24..366c364e06 100644
--- a/openstackclient/tests/unit/test_shell.py
+++ b/openstackclient/tests/unit/test_shell.py
@@ -13,12 +13,12 @@
 #   under the License.
 #
 
+import importlib
 import os
 import sys
 from unittest import mock
 
 from osc_lib.tests import utils as osc_lib_test_utils
-from oslo_utils import importutils
 import wrapt
 
 from openstackclient import shell
@@ -151,12 +151,13 @@ class TestShell(osc_lib_test_utils.TestShell):
         super(TestShell, self).setUp()
         # TODO(dtroyer): remove this once the shell_class_patch patch is
         #                released in osc-lib
-        self.shell_class = importutils.import_class(self.shell_class_name)
+        mod_str, _sep, class_str = self.shell_class_name.rpartition('.')
+        self.shell_class = getattr(importlib.import_module(mod_str), class_str)
 
     def _assert_admin_token_auth(self, cmd_options, default_args):
         with mock.patch(
-                self.shell_class_name + ".initialize_app",
-                self.app,
+            self.shell_class_name + ".initialize_app",
+            self.app,
         ):
             _shell = osc_lib_test_utils.make_shell(
                 shell_class=self.shell_class,
diff --git a/requirements.txt b/requirements.txt
index 64261f97d0..ee6b6241ae 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,10 +4,10 @@
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
 
 cliff!=2.9.0,>=2.8.0 # Apache-2.0
+iso8601>=0.1.11 # MIT
 openstacksdk>=0.48.0 # Apache-2.0
 osc-lib>=2.0.0 # Apache-2.0
 oslo.i18n>=3.15.3 # Apache-2.0
-oslo.utils>=3.33.0 # Apache-2.0
 python-keystoneclient>=3.22.0 # Apache-2.0
 python-novaclient>=15.1.0 # Apache-2.0
 python-cinderclient>=3.3.0 # Apache-2.0