Dưới đây là một phần mã nguồn tham khảo:
1 if (localTime.bits.second++ >= 59) {
2 localTime.bits.second = 0;
3 if (localTime.bits.minute++ >= 59) {
4 localTime.bits.minute = 0;
5 if (localTime.bits.hour++ >= 23) {
6 localTime.bits.hour = 0;
7 localTime.bits.day++;
8 if (localTime.bits.month == 2) {
9 int year = localTime.bits.year + 1990;
10 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
11 if (localTime.bits.day > 29) {
12 localTime.bits.day = 1;
13 localTime.bits.month++;
14 }
15 } else {
16 if (localTime.bits.day > 28) {
17 localTime.bits.day = 1;
18 localTime.bits.month++;
19 }
20 }
21 } else if (localTime.bits.month % 2) {
22 if (localTime.bits.month == 9 || localTime.bits.month == 11) {
23 if (localTime.bits.day > 30) {
24 localTime.bits.day = 1;
25 localTime.bits.month++;
26 }
27 } else {
28 if (localTime.bits.day > 31) {
29 localTime.bits.day = 1;
30 localTime.bits.month++;
31 }
32 }
33 } else {
34 if (localTime.bits.month == 4 || localTime.bits.month == 6) {
35 if (localTime.bits.day > 30) {
36 localTime.bits.day = 1;
37 localTime.bits.month++;
38 }
39 } else {
40 if (localTime.bits.day > 31) {
41 localTime.bits.day = 1;
42 localTime.bits.month++;
43 if (localTime.bits.month > 12) {
44 localTime.bits.month = 1;
45 if (localTime.bits.year++ > 62) {
46 localTime.bits.year = 9;
47 }
48 }
49 }
50 }
51 }
52 }
53 }
54 }
Mã trên nên được thực thi trong hàm ngắt chu kỳ thời gian.
Nếu muốn chuyển đổi thành số giây sử dụng giá trị RTC:
1 static posix_time_t update_sntp_from_local_timer(void) {
2 struct tm timestamp;
3 time_t t2 = 0;
4 //0 là tháng đầu tiên, 1 là tháng thứ hai, v.v...
5 timestamp.tm_mon = localTimestamp.bxi_timestamp.bits.month - 1;
6 timestamp.tm_mday = localTimestamp.bxi_timestamp.bits.day; //ngày trong tháng
7 timestamp.tm_year = localTimestamp.year - 1900; //bắt đầu từ năm 1900, \
8 ví dụ: 1900-1970 = 2208988800 giây
9 timestamp.tm_hour = localTimestamp.bxi_timestamp.bits.hour;
10 timestamp.tm_min = localTimestamp.bxi_timestamp.bits.minute;
11 timestamp.tm_sec = localTimestamp.bxi_timestamp.bits.second;
12 timestamp.tm_yday = 0; //ngày trong năm
13 timestamp.tm_isdst = 0;
14 t2 = mktime(×tamp);
15 return t2;
16}