dt->tm_wday = BCD2BIN(buf[3]) - 1;
                dt->tm_mday = BCD2BIN(buf[4]);
                val = buf[5] & 0x7f;
-               dt->tm_mon = BCD2BIN(val);
-               dt->tm_year = 1900 + BCD2BIN(buf[6]);
+               dt->tm_mon = BCD2BIN(val) - 1;
+               dt->tm_year = BCD2BIN(buf[6]);
                if (buf[5] & 0x80)
                        dt->tm_year += 100;
 
        buf[3] = BIN2BCD(dt->tm_hour) | (1 << 6);
        buf[4] = BIN2BCD(dt->tm_wday) + 1;
        buf[5] = BIN2BCD(dt->tm_mday);
-       buf[6] = BIN2BCD(dt->tm_mon);
-       if (dt->tm_year >= 2000) {
-               val = dt->tm_year - 2000;
+       buf[6] = BIN2BCD(dt->tm_mon) + 1;
+       val = dt->tm_year;
+       if (val >= 100) {
+               val -= 100;
                buf[6] |= (1 << 7);
-       } else {
-               val = dt->tm_year - 1900;
        }
        buf[7] = BIN2BCD(val);