diff --git a/extensions/openpower-pels/bcd_time.cpp b/extensions/openpower-pels/bcd_time.cpp
new file mode 100644
index 0000000..bb80f1a
--- /dev/null
+++ b/extensions/openpower-pels/bcd_time.cpp
@@ -0,0 +1,61 @@
+#include "bcd_time.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+bool BCDTime::operator==(const BCDTime& right) const
+{
+    return (yearMSB == right.yearMSB) && (yearLSB == right.yearLSB) &&
+           (month == right.month) && (day == right.day) &&
+           (hour == right.hour) && (minutes == right.minutes) &&
+           (seconds == right.seconds) && (hundredths == right.hundredths);
+}
+
+bool BCDTime::operator!=(const BCDTime& right) const
+{
+    return !(*this == right);
+}
+
+BCDTime getBCDTime(std::chrono::time_point<std::chrono::system_clock>& time)
+{
+    BCDTime bcd;
+
+    using namespace std::chrono;
+    time_t t = system_clock::to_time_t(time);
+    tm* localTime = localtime(&t);
+    assert(localTime != nullptr);
+
+    int year = 1900 + localTime->tm_year;
+    bcd.yearMSB = toBCD(year / 100);
+    bcd.yearLSB = toBCD(year % 100);
+    bcd.month = toBCD(localTime->tm_mon + 1);
+    bcd.day = toBCD(localTime->tm_mday);
+    bcd.hour = toBCD(localTime->tm_hour);
+    bcd.minutes = toBCD(localTime->tm_min);
+    bcd.seconds = toBCD(localTime->tm_sec);
+
+    auto ms = duration_cast<milliseconds>(time.time_since_epoch()).count();
+    int hundredths = (ms % 1000) / 10;
+    bcd.hundredths = toBCD(hundredths);
+
+    return bcd;
+}
+
+Stream& operator>>(Stream& s, BCDTime& time)
+{
+    s >> time.yearMSB >> time.yearLSB >> time.month >> time.day >> time.hour;
+    s >> time.minutes >> time.seconds >> time.hundredths;
+    return s;
+}
+
+Stream& operator<<(Stream& s, BCDTime& time)
+{
+    s << time.yearMSB << time.yearLSB << time.month << time.day << time.hour;
+    s << time.minutes << time.seconds << time.hundredths;
+    return s;
+}
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/bcd_time.hpp b/extensions/openpower-pels/bcd_time.hpp
new file mode 100644
index 0000000..e218756
--- /dev/null
+++ b/extensions/openpower-pels/bcd_time.hpp
@@ -0,0 +1,88 @@
+#pragma once
+#include "stream.hpp"
+
+#include <chrono>
+
+namespace openpower
+{
+namespace pels
+{
+
+/**
+ * @brief A structure that contains a PEL timestamp in BCD.
+ */
+struct BCDTime
+{
+    uint8_t yearMSB;
+    uint8_t yearLSB;
+    uint8_t month;
+    uint8_t day;
+    uint8_t hour;
+    uint8_t minutes;
+    uint8_t seconds;
+    uint8_t hundredths;
+
+    bool operator==(const BCDTime& right) const;
+    bool operator!=(const BCDTime& right) const;
+
+} __attribute__((packed));
+
+/**
+ * @brief Converts a time_point into a BCD time
+ *
+ * @param[in] time - the time_point to convert
+ * @return BCDTime - the BCD time
+ */
+BCDTime getBCDTime(std::chrono::time_point<std::chrono::system_clock>& time);
+
+/**
+ * @brief Converts a number to a BCD.
+ *
+ * For example 32 -> 0x32.
+ *
+ * Source: PLDM repository
+ *
+ * @param[in] value - the value to convert.
+ *
+ * @return T - the BCD value
+ */
+template <typename T>
+T toBCD(T decimal)
+{
+    T bcd = 0;
+    T remainder = 0;
+    auto count = 0;
+
+    while (decimal)
+    {
+        remainder = decimal % 10;
+        bcd = bcd + (remainder << count);
+        decimal = decimal / 10;
+        count += 4;
+    }
+
+    return bcd;
+}
+
+/**
+ * @brief Stream extraction operator for BCDTime
+ *
+ * @param[in] s - the Stream
+ * @param[out] time - the BCD time
+ *
+ * @return Stream&
+ */
+Stream& operator>>(Stream& s, BCDTime& time);
+
+/**
+ * @brief Stream insertion operator for BCDTime
+ *
+ * @param[in/out] s - the Stream
+ * @param[in] time - the BCD time
+ *
+ * @return Stream&
+ */
+Stream& operator<<(Stream& s, BCDTime& time);
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index 1030171..94c7bb8 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -1,4 +1,5 @@
 phosphor_log_manager_SOURCES += \
+	extensions/openpower-pels/bcd_time.cpp \
 	extensions/openpower-pels/entry_points.cpp \
 	extensions/openpower-pels/manager.cpp
 
