diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 74008cb..e8fa14b 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -27,7 +27,6 @@
 #include "utils/systemd_utils.hpp"
 #include "utils/time_utils.hpp"
 
-#include <boost/date_time.hpp>
 #include <sdbusplus/asio/property.hpp>
 #include <sdbusplus/unpack_properties.hpp>
 
@@ -1887,46 +1886,30 @@
 {
     BMCWEB_LOG_DEBUG << "Set date time: " << datetime;
 
-    std::stringstream stream(datetime);
-    // Convert from ISO 8601 to boost local_time
-    // (BMC only has time in UTC)
-    boost::posix_time::ptime posixTime;
-    boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1));
-    // Facet gets deleted with the stringsteam
-    auto ifc = std::make_unique<boost::local_time::local_time_input_facet>(
-        "%Y-%m-%d %H:%M:%S%F %ZP");
-    stream.imbue(std::locale(stream.getloc(), ifc.release()));
-
-    boost::local_time::local_date_time ldt(boost::local_time::not_a_date_time);
-
-    if (stream >> ldt)
-    {
-        posixTime = ldt.utc_time();
-        boost::posix_time::time_duration dur = posixTime - epoch;
-        uint64_t durMicroSecs = static_cast<uint64_t>(dur.total_microseconds());
-        crow::connections::systemBus->async_method_call(
-            [aResp{std::move(aResp)}, 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(aResp->res);
-                return;
-            }
-            aResp->res.jsonValue["DateTime"] = datetime;
-            },
-            "xyz.openbmc_project.Time.Manager", "/xyz/openbmc_project/time/bmc",
-            "org.freedesktop.DBus.Properties", "Set",
-            "xyz.openbmc_project.Time.EpochTime", "Elapsed",
-            dbus::utility::DbusVariantType(durMicroSecs));
-    }
-    else
+    std::optional<redfish::time_utils::usSinceEpoch> us =
+        redfish::time_utils::dateStringToEpoch(datetime);
+    if (!us)
     {
         messages::propertyValueFormatError(aResp->res, datetime, "DateTime");
         return;
     }
+    crow::connections::systemBus->async_method_call(
+        [aResp{std::move(aResp)},
+         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(aResp->res);
+            return;
+        }
+        aResp->res.jsonValue["DateTime"] = datetime;
+        },
+        "xyz.openbmc_project.Time.Manager", "/xyz/openbmc_project/time/bmc",
+        "org.freedesktop.DBus.Properties", "Set",
+        "xyz.openbmc_project.Time.EpochTime", "Elapsed",
+        dbus::utility::DbusVariantType(us->count()));
 }
 
 inline void requestRoutesManager(App& app)
