Câu trả lời:
Nếu bạn muốn tự tính toán ngày trong tuần, đây là triển khai C của một phần của mô-đun Perl tôi đã viết khoảng 20 năm trước. Tôi thích thuật toán này vì nó không yêu cầu bất kỳ vòng lặp hoặc bảng độ dài tháng nào. Lưu ý rằng int
s được giả sử là 32 bit.
/* Returns the number of days to the start of the specified year, taking leap
* years into account, but not the shift from the Julian calendar to the
* Gregorian calendar. Instead, it is as though the Gregorian calendar is
* extrapolated back in time to a hypothetical "year zero".
*/
int leap (int year)
{
return year*365 + (year/4) - (year/100) + (year/400);
}
/* Returns a number representing the number of days since March 1 in the
* hypothetical year 0, not counting the change from the Julian calendar
* to the Gregorian calendar that occured in the 16th century. This
* algorithm is loosely based on a function known as "Zeller's Congruence".
* This number MOD 7 gives the day of week, where 0 = Monday and 6 = Sunday.
*/
int zeller (int year, int month, int day)
{
year += ((month+9)/12) - 1;
month = (month+9) % 12;
return leap (year) + month*30 + ((6*month+5)/10) + day + 1;
}
/* Returns the day of week (1=Monday, 7=Sunday) for a given date.
*/
int dow (int year, int month, int day)
{
return (zeller (year, month, day) % 7) + 1;
}
Theo bảng dữ liệu tại địa chỉ 0x03 trong bảng 4-1, có một trường 'Ngày'. Ở cuối dòng có một mô tả ngắn:
Điều này có nghĩa là ngày có thể được đặt thành bất kỳ số nào trong khoảng từ 1 đến 7. Bạn có thể chọn quy ước của riêng mình vào ngày nào trong tuần. Trên hệ thống POSIX Thứ hai được định nghĩa là 1, tôi nghĩ đó là một tiêu chuẩn tốt. Rồi thứ ba = 2; Thứ tư = 3; ...
Ngày = 0 không được ghi lại, vì vậy đừng sử dụng nó.
Trên Linux, con số này có thể dễ dàng được tìm thấy bằng cách sử dụng lệnh date +%u
, mà ngày nay trả lời 6
là thứ bảy. Nếu bạn muốn tính toán này cục bộ trên PIC của bạn, bạn sẽ phải tìm ra C-thư viện mà cụ công thức, tôi tin rằng strftime
trong <time.h>
không chỉ đó, nhưng tôi không phải là đủ C lập trình để giải thích làm thế nào để sử dụng thư viện nói riêng. Nó là một thư viện thường được sử dụng, vì vậy tài liệu rất dễ tìm.
Ngày trong tuần là tùy ý . Bạn xác định nó. Bạn có thể sử dụng Chủ nhật Julian = Ngày 1. Bạn có thể sử dụng Thứ Hai là Ngày 1 vì Chủ nhật là ngày thứ 7. Bạn có thể sử dụng Thứ Sáu là Ngày 1 vì đó là ngày đầu tiên của cuối tuần. Bạn có thể sử dụng Thứ Ba là Ngày 1 vì bạn ghét Thứ Hai.