diff --git a/src/ADCSensor.cpp b/src/ADCSensor.cpp
index eacce22..fe2c8a7 100644
--- a/src/ADCSensor.cpp
+++ b/src/ADCSensor.cpp
@@ -18,7 +18,6 @@
 
 #include <ADCSensor.hpp>
 #include <boost/asio/read_until.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -109,7 +108,7 @@
         // value. Guarantee that the HW signal can be stable, the HW signal
         // could be instability.
         waitTimer.expires_from_now(
-            boost::posix_time::milliseconds(bridgeGpio->setupTimeMs));
+            std::chrono::milliseconds(bridgeGpio->setupTimeMs));
         waitTimer.async_wait(
             [weakRef, buffer](const boost::system::error_code& ec) {
             std::shared_ptr<ADCSensor> self = weakRef.lock();
@@ -198,7 +197,7 @@
         return; // we're no longer valid
     }
     inputDev.assign(fd);
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(sensorPollMs));
+    waitTimer.expires_from_now(std::chrono::milliseconds(sensorPollMs));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         std::shared_ptr<ADCSensor> self = weakRef.lock();
         if (ec == boost::asio::error::operation_aborted)
diff --git a/src/ADCSensorMain.cpp b/src/ADCSensorMain.cpp
index a2f6514..05d586f 100644
--- a/src/ADCSensorMain.cpp
+++ b/src/ADCSensorMain.cpp
@@ -320,7 +320,7 @@
                       UpdateType::init);
     });
 
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t& message) {
         if (message.is_method_error())
@@ -330,7 +330,7 @@
         }
         sensorsChanged->insert(message.get_path());
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
@@ -378,7 +378,7 @@
         }
 
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/ChassisIntrusionSensor.cpp b/src/ChassisIntrusionSensor.cpp
index 6c40717..2bb04ce 100644
--- a/src/ChassisIntrusionSensor.cpp
+++ b/src/ChassisIntrusionSensor.cpp
@@ -146,8 +146,7 @@
 void ChassisIntrusionSensor::pollSensorStatusByPch()
 {
     // setting a new experation implicitly cancels any pending async wait
-    mPollTimer.expires_from_now(
-        boost::posix_time::seconds(intrusionSensorPollSec));
+    mPollTimer.expires_from_now(std::chrono::seconds(intrusionSensorPollSec));
 
     mPollTimer.async_wait([&](const boost::system::error_code& ec) {
         // case of timer expired
diff --git a/src/ExitAirTempSensor.cpp b/src/ExitAirTempSensor.cpp
index 33fd079..eb816e8 100644
--- a/src/ExitAirTempSensor.cpp
+++ b/src/ExitAirTempSensor.cpp
@@ -938,11 +938,11 @@
 
     io.post([&]() { createSensor(objectServer, sensor, systemBus); });
 
-    boost::asio::deadline_timer configTimer(io);
+    boost::asio::steady_timer configTimer(io);
 
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t&) {
-        configTimer.expires_from_now(boost::posix_time::seconds(1));
+        configTimer.expires_from_now(std::chrono::seconds(1));
         // create a timer because normally multiple properties change
         configTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/ExternalSensor.cpp b/src/ExternalSensor.cpp
index 3a6c4aa..cbba6e1 100644
--- a/src/ExternalSensor.cpp
+++ b/src/ExternalSensor.cpp
@@ -4,7 +4,6 @@
 
 #include <unistd.h>
 
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
diff --git a/src/ExternalSensorMain.cpp b/src/ExternalSensorMain.cpp
index e79098f..23721a8 100644
--- a/src/ExternalSensorMain.cpp
+++ b/src/ExternalSensorMain.cpp
@@ -351,7 +351,7 @@
         createSensors(objectServer, sensors, systemBus, nullptr, reaperTimer);
     });
 
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&objectServer, &sensors, &systemBus, &sensorsChanged, &filterTimer,
          &reaperTimer](sdbusplus::message_t& message) mutable {
@@ -370,7 +370,7 @@
         }
 
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait(
             [&objectServer, &sensors, &systemBus, &sensorsChanged,
diff --git a/src/FanMain.cpp b/src/FanMain.cpp
index a192380..9d495e0 100644
--- a/src/FanMain.cpp
+++ b/src/FanMain.cpp
@@ -556,7 +556,7 @@
                       nullptr);
     });
 
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t& message) {
         if (message.is_method_error())
@@ -566,7 +566,7 @@
         }
         sensorsChanged->insert(message.get_path());
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index 4ee020a..9ebdfcd 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -532,7 +532,7 @@
         createSensors(io, objectServer, sensors, systemBus, nullptr);
     });
 
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t& message) {
         if (message.is_method_error())
@@ -542,7 +542,7 @@
         }
         sensorsChanged->insert(message.get_path());
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index 3f19ec1..ee096ea 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -18,7 +18,6 @@
 
 #include <HwmonTempSensor.hpp>
 #include <boost/asio/read_until.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -116,7 +115,7 @@
 void HwmonTempSensor::restartRead()
 {
     std::weak_ptr<HwmonTempSensor> weakRef = weak_from_this();
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(sensorPollMs));
+    waitTimer.expires_from_now(std::chrono::milliseconds(sensorPollMs));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
diff --git a/src/IntelCPUSensor.cpp b/src/IntelCPUSensor.cpp
index 8f04e99..3410574 100644
--- a/src/IntelCPUSensor.cpp
+++ b/src/IntelCPUSensor.cpp
@@ -20,7 +20,6 @@
 #include <Utils.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -113,7 +112,7 @@
 void IntelCPUSensor::restartRead(void)
 {
     std::weak_ptr<IntelCPUSensor> weakRef = weak_from_this();
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(pollTime));
+    waitTimer.expires_from_now(std::chrono::milliseconds(pollTime));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
diff --git a/src/IntelCPUSensorMain.cpp b/src/IntelCPUSensorMain.cpp
index 485729b..0d7f896 100644
--- a/src/IntelCPUSensorMain.cpp
+++ b/src/IntelCPUSensorMain.cpp
@@ -22,7 +22,6 @@
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
 #include <boost/container/flat_set.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/bus/match.hpp>
@@ -94,8 +93,8 @@
     {IntelCPUSensor::labelTcontrol, "Tthrottle", "Tjmax"})};
 
 void detectCpuAsync(
-    boost::asio::deadline_timer& pingTimer,
-    boost::asio::deadline_timer& creationTimer, boost::asio::io_service& io,
+    boost::asio::steady_timer& pingTimer,
+    boost::asio::steady_timer& creationTimer, boost::asio::io_service& io,
     sdbusplus::asio::object_server& objectServer,
     std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
     boost::container::flat_set<CPUConfig>& cpuConfigs,
@@ -447,8 +446,8 @@
     std::cout << parameters << " on bus " << busStr << " is exported\n";
 }
 
-void detectCpu(boost::asio::deadline_timer& pingTimer,
-               boost::asio::deadline_timer& creationTimer,
+void detectCpu(boost::asio::steady_timer& pingTimer,
+               boost::asio::steady_timer& creationTimer,
                boost::asio::io_service& io,
                sdbusplus::asio::object_server& objectServer,
                std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
@@ -555,7 +554,7 @@
     if (rescanDelaySeconds != 0U)
     {
         creationTimer.expires_from_now(
-            boost::posix_time::seconds(rescanDelaySeconds));
+            std::chrono::seconds(rescanDelaySeconds));
         creationTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
             {
@@ -579,14 +578,14 @@
 }
 
 void detectCpuAsync(
-    boost::asio::deadline_timer& pingTimer,
-    boost::asio::deadline_timer& creationTimer, boost::asio::io_service& io,
+    boost::asio::steady_timer& pingTimer,
+    boost::asio::steady_timer& creationTimer, boost::asio::io_service& io,
     sdbusplus::asio::object_server& objectServer,
     std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
     boost::container::flat_set<CPUConfig>& cpuConfigs,
     ManagedObjectType& sensorConfigs)
 {
-    pingTimer.expires_from_now(boost::posix_time::seconds(1));
+    pingTimer.expires_from_now(std::chrono::seconds(1));
     pingTimer.async_wait([&](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
@@ -710,12 +709,12 @@
     boost::container::flat_set<CPUConfig> cpuConfigs;
 
     sdbusplus::asio::object_server objectServer(systemBus);
-    boost::asio::deadline_timer pingTimer(io);
-    boost::asio::deadline_timer creationTimer(io);
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer pingTimer(io);
+    boost::asio::steady_timer creationTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     ManagedObjectType sensorConfigs;
 
-    filterTimer.expires_from_now(boost::posix_time::seconds(1));
+    filterTimer.expires_from_now(std::chrono::seconds(1));
     filterTimer.async_wait([&](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
@@ -743,7 +742,7 @@
         }
 
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
             {
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 7c5f965..5dabc25 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -52,7 +52,7 @@
 
 boost::container::flat_map<std::string, std::unique_ptr<IpmbSensor>> sensors;
 
-std::unique_ptr<boost::asio::deadline_timer> initCmdTimer;
+std::unique_ptr<boost::asio::steady_timer> initCmdTimer;
 
 IpmbSensor::IpmbSensor(std::shared_ptr<sdbusplus::asio::connection>& conn,
                        boost::asio::io_service& io,
@@ -335,7 +335,7 @@
 
 void IpmbSensor::read(void)
 {
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(sensorPollMs));
+    waitTimer.expires_from_now(std::chrono::milliseconds(sensorPollMs));
     waitTimer.async_wait([this](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
@@ -586,7 +586,7 @@
             // we seem to send this command too fast sometimes, wait before
             // sending
             initCmdTimer->expires_from_now(
-                boost::posix_time::seconds(reinitWaitSeconds));
+                std::chrono::seconds(reinitWaitSeconds));
 
             initCmdTimer->async_wait([](const boost::system::error_code ec) {
                 if (ec == boost::asio::error::operation_aborted)
@@ -614,15 +614,15 @@
     systemBus->request_name("xyz.openbmc_project.IpmbSensor");
     sdbusplus::asio::object_server objectServer(systemBus);
 
-    initCmdTimer = std::make_unique<boost::asio::deadline_timer>(io);
+    initCmdTimer = std::make_unique<boost::asio::steady_timer>(io);
 
     io.post([&]() { createSensors(io, objectServer, sensors, systemBus); });
 
-    boost::asio::deadline_timer configTimer(io);
+    boost::asio::steady_timer configTimer(io);
 
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t&) {
-        configTimer.expires_from_now(boost::posix_time::seconds(1));
+        configTimer.expires_from_now(std::chrono::seconds(1));
         // create a timer because normally multiple properties change
         configTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/MCUTempSensor.cpp b/src/MCUTempSensor.cpp
index 47893d2..ba68bed 100644
--- a/src/MCUTempSensor.cpp
+++ b/src/MCUTempSensor.cpp
@@ -151,7 +151,7 @@
 {
     static constexpr size_t pollTime = 1; // in seconds
 
-    waitTimer.expires_from_now(boost::posix_time::seconds(pollTime));
+    waitTimer.expires_from_now(std::chrono::seconds(pollTime));
     waitTimer.async_wait([this](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
@@ -263,11 +263,11 @@
 
     io.post([&]() { createSensors(io, objectServer, sensors, systemBus); });
 
-    boost::asio::deadline_timer configTimer(io);
+    boost::asio::steady_timer configTimer(io);
 
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t&) {
-        configTimer.expires_from_now(boost::posix_time::seconds(1));
+        configTimer.expires_from_now(std::chrono::seconds(1));
         // create a timer because normally multiple properties change
         configTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/NVMeBasicContext.cpp b/src/NVMeBasicContext.cpp
index 465f177..b4599c7 100644
--- a/src/NVMeBasicContext.cpp
+++ b/src/NVMeBasicContext.cpp
@@ -352,7 +352,7 @@
 {
     pollCursor = sensors.begin();
 
-    scanTimer.expires_from_now(boost::posix_time::seconds(1));
+    scanTimer.expires_from_now(std::chrono::seconds(1));
     scanTimer.async_wait([weakSelf{weak_from_this()}](
                              const boost::system::error_code errorCode) {
         if (errorCode == boost::asio::error::operation_aborted)
diff --git a/src/NVMeSensorMain.cpp b/src/NVMeSensorMain.cpp
index 1398d3c..463ada3 100644
--- a/src/NVMeSensorMain.cpp
+++ b/src/NVMeSensorMain.cpp
@@ -17,7 +17,7 @@
 #include <NVMeBasicContext.hpp>
 #include <NVMeContext.hpp>
 #include <NVMeSensor.hpp>
-#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/steady_timer.hpp>
 
 #include <optional>
 #include <regex>
@@ -235,11 +235,11 @@
 
     io.post([&]() { createSensors(io, objectServer, systemBus); });
 
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&filterTimer, &io, &objectServer, &systemBus](sdbusplus::message_t&) {
         // this implicitly cancels the timer
-        filterTimer.expires_from_now(boost::posix_time::seconds(1));
+        filterTimer.expires_from_now(std::chrono::seconds(1));
 
         filterTimer.async_wait([&](const boost::system::error_code& ec) {
             if (ec == boost::asio::error::operation_aborted)
diff --git a/src/PSUEvent.cpp b/src/PSUEvent.cpp
index 8c83d06..27bb8b1 100644
--- a/src/PSUEvent.cpp
+++ b/src/PSUEvent.cpp
@@ -218,7 +218,7 @@
 void PSUSubEvent::restartRead()
 {
     std::weak_ptr<PSUSubEvent> weakRef = weak_from_this();
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(eventPollMs));
+    waitTimer.expires_from_now(std::chrono::milliseconds(eventPollMs));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index c5ed373..6e2934f 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -19,7 +19,6 @@
 #include <PSUSensor.hpp>
 #include <boost/asio/random_access_file.hpp>
 #include <boost/asio/read_until.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -146,7 +145,7 @@
 void PSUSensor::restartRead(void)
 {
     std::weak_ptr<PSUSensor> weakRef = weak_from_this();
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(sensorPollMs));
+    waitTimer.expires_from_now(std::chrono::milliseconds(sensorPollMs));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index 0a197b8..918b9c6 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -1050,7 +1050,7 @@
     propertyInitialize();
 
     io.post([&]() { createSensors(io, objectServer, systemBus, nullptr); });
-    boost::asio::deadline_timer filterTimer(io);
+    boost::asio::steady_timer filterTimer(io);
     std::function<void(sdbusplus::message_t&)> eventHandler =
         [&](sdbusplus::message_t& message) {
             if (message.is_method_error())
@@ -1059,7 +1059,7 @@
                 return;
             }
             sensorsChanged->insert(message.get_path());
-            filterTimer.expires_from_now(boost::posix_time::seconds(3));
+            filterTimer.expires_from_now(std::chrono::seconds(3));
             filterTimer.async_wait([&](const boost::system::error_code& ec) {
                 if (ec == boost::asio::error::operation_aborted)
                 {
diff --git a/src/TachSensor.cpp b/src/TachSensor.cpp
index dacbec6..35185cd 100644
--- a/src/TachSensor.cpp
+++ b/src/TachSensor.cpp
@@ -19,7 +19,6 @@
 #include <TachSensor.hpp>
 #include <Utils.hpp>
 #include <boost/asio/read_until.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <gpiod.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
@@ -125,7 +124,7 @@
 void TachSensor::restartRead(size_t pollTime)
 {
     std::weak_ptr<TachSensor> weakRef = weak_from_this();
-    waitTimer.expires_from_now(boost::posix_time::milliseconds(pollTime));
+    waitTimer.expires_from_now(std::chrono::milliseconds(pollTime));
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index 610e68e..ee0456d 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -339,14 +339,14 @@
     }
     if (pair == nullptr)
     {
-        pair = &timers.emplace_back(timerUsed, boost::asio::deadline_timer(io));
+        pair = &timers.emplace_back(timerUsed, boost::asio::steady_timer(io));
     }
 
     pair->first.used = true;
     pair->first.level = threshold.level;
     pair->first.direction = threshold.direction;
     pair->first.assert = assert;
-    pair->second.expires_from_now(boost::posix_time::seconds(waitTime));
+    pair->second.expires_from_now(std::chrono::seconds(waitTime));
     pair->second.async_wait([weakSensor, pair, threshold, assert,
                              assertValue](boost::system::error_code ec) {
         auto sensorPtr = weakSensor.lock();
