diff --git a/vendor/ess/lib/sis8300drvbcm.c b/vendor/ess/lib/sis8300drvbcm.c
index 6764e2321cfc3b7beed2c69189c458af7de7c844..36cb001a40758626b2cc3140709c1b56a1a0de95 100644
--- a/vendor/ess/lib/sis8300drvbcm.c
+++ b/vendor/ess/lib/sis8300drvbcm.c
@@ -35,6 +35,8 @@
 #include <assert.h>
 #include <math.h>
 
+#include <epicsTime.h>
+
 #include <sis8300drv.h>
 #include <sis8300drv_utils.h>
 #include <sis8300_reg.h>
@@ -1868,7 +1870,9 @@ int sis8300drvbcm_set_timestamp(sis8300drv_usr *sisuser, unsigned int sec, unsig
     if (ret) {
         return ret;
     }
-    ret = sis8300drv_reg_write(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, sec);
+    // EPICS and POSIX Epoch differs in 20 year (631152000 seconds)
+    unsigned int value = sec + POSIX_TIME_AT_EPICS_EPOCH;
+    ret = sis8300drv_reg_write(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, value);
     if (ret) {
         return ret;
     }
@@ -1881,10 +1885,13 @@ int sis8300drvbcm_get_timestamp(sis8300drv_usr *sisuser, unsigned int *sec, unsi
     if (ret) {
         return ret;
     }
-    ret = sis8300drv_reg_read(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, sec);
+    unsigned int value;
+    ret = sis8300drv_reg_read(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, &value);
     if (ret) {
         return ret;
     }
+    // EPICS and POSIX Epoch differs in 20 year (631152000 seconds)
+    *sec = value - POSIX_TIME_AT_EPICS_EPOCH;
     return ret;
 }