diff --git a/src/store/modules/Configuration/DateTimeSettingsStore.js b/src/store/modules/Configuration/DateTimeSettingsStore.js
new file mode 100644
index 0000000..9da0cb4
--- /dev/null
+++ b/src/store/modules/Configuration/DateTimeSettingsStore.js
@@ -0,0 +1,68 @@
+import api from '../../api';
+import i18n from '@/i18n';
+
+const DateTimeStore = {
+  namespaced: true,
+  state: {
+    ntpServers: [],
+    isNtpProtocolEnabled: null
+  },
+  getters: {
+    ntpServers: state => state.ntpServers,
+    isNtpProtocolEnabled: state => state.isNtpProtocolEnabled
+  },
+  mutations: {
+    setNtpServers: (state, ntpServers) => (state.ntpServers = ntpServers),
+    setIsNtpProtocolEnabled: (state, isNtpProtocolEnabled) =>
+      (state.isNtpProtocolEnabled = isNtpProtocolEnabled)
+  },
+  actions: {
+    async getNtpData({ commit }) {
+      return await api
+        .get('/redfish/v1/Managers/bmc/NetworkProtocol')
+        .then(response => {
+          const ntpServers = response.data.NTP.NTPServers;
+          const isNtpProtocolEnabled = response.data.NTP.ProtocolEnabled;
+          commit('setNtpServers', ntpServers);
+          commit('setIsNtpProtocolEnabled', isNtpProtocolEnabled);
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    async updateDateTimeSettings(_, dateTimeForm) {
+      const ntpData = {
+        NTP: {
+          ProtocolEnabled: dateTimeForm.ntpProtocolEnabled
+        }
+      };
+
+      if (dateTimeForm.ntpProtocolEnabled) {
+        ntpData.NTP.NTPServers = dateTimeForm.ntpServersArray;
+      }
+      return await api
+        .patch(`/redfish/v1/Managers/bmc/NetworkProtocol`, ntpData)
+        .then(() => {
+          if (!dateTimeForm.ntpProtocolEnabled) {
+            const dateTimeData = {
+              DateTime: dateTimeForm.updatedDateTime
+            };
+            api.patch(`/redfish/v1/Managers/bmc`, dateTimeData);
+          }
+        })
+        .then(() => {
+          return i18n.t(
+            'pageDateTimeSettings.toast.successSaveDateTimeSettings'
+          );
+        })
+        .catch(error => {
+          console.log(error);
+          throw new Error(
+            i18n.t('pageDateTimeSettings.toast.errorSaveDateTimeSettings')
+          );
+        });
+    }
+  }
+};
+
+export default DateTimeStore;
