diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 527076f..26abec0 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -1857,8 +1857,37 @@
     });
 }
 
-inline void setDateTime(std::shared_ptr<bmcweb::AsyncResp> asyncResp,
-                        std::string datetime)
+inline void
+    afterSetDateTime(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                     const boost::system::error_code& ec,
+                     const sdbusplus::message_t& msg)
+{
+    if (ec)
+    {
+        BMCWEB_LOG_DEBUG("Failed to set elapsed time. DBUS response error {}",
+                         ec);
+        const sd_bus_error* dbusError = msg.get_error();
+        if (dbusError != nullptr)
+        {
+            std::string_view errorName(dbusError->name);
+            if (errorName ==
+                "org.freedesktop.timedate1.AutomaticTimeSyncEnabled")
+            {
+                BMCWEB_LOG_DEBUG("Setting conflict");
+                messages::propertyValueConflict(
+                    asyncResp->res, "DateTime",
+                    "Managers/NetworkProtocol/NTPProcotolEnabled");
+                return;
+            }
+        }
+        messages::internalError(asyncResp->res);
+        return;
+    }
+    asyncResp->res.result(boost::beast::http::status::no_content);
+}
+
+inline void setDateTime(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                        const std::string& datetime)
 {
     BMCWEB_LOG_DEBUG("Set date time: {}", datetime);
 
@@ -1870,22 +1899,17 @@
                                            "DateTime");
         return;
     }
-    sdbusplus::asio::setProperty(
-        *crow::connections::systemBus, "xyz.openbmc_project.Time.Manager",
-        "/xyz/openbmc_project/time/bmc", "xyz.openbmc_project.Time.EpochTime",
-        "Elapsed", us->count(),
-        [asyncResp{std::move(asyncResp)},
-         datetime{std::move(datetime)}](const boost::system::error_code& ec) {
-        if (ec)
-        {
-            BMCWEB_LOG_DEBUG("Failed to set elapsed time. "
-                             "DBUS response error {}",
-                             ec);
-            messages::internalError(asyncResp->res);
-            return;
-        }
-        asyncResp->res.jsonValue["DateTime"] = datetime;
-    });
+    // Set the absolute datetime
+    bool relative = false;
+    bool interactive = false;
+    crow::connections::systemBus->async_method_call(
+        [asyncResp](const boost::system::error_code& ec,
+                    const sdbusplus::message_t& msg) {
+        afterSetDateTime(asyncResp, ec, msg);
+    },
+        "org.freedesktop.timedate1", "/org/freedesktop/timedate1",
+        "org.freedesktop.timedate1", "SetTime", us->count(), relative,
+        interactive);
 }
 
 inline void
@@ -2259,7 +2283,7 @@
         }
         if (datetime)
         {
-            setDateTime(asyncResp, std::move(*datetime));
+            setDateTime(asyncResp, *datetime);
         }
     });
 }
