Đang bí không biết lập trình thế nào để tính lịch âm may mà có bác hướng dẫn tỉ mỉ nhiệt tình!thanks bác nhìu!hj
Thông báo
Collapse
No announcement yet.
Thuật toán tính Âm lịch từ Dương lịch dùng phương pháp tra bảng
Collapse
X
-
Chào bác pct.com
Nếu theo code của bác thì ngày 23-6-2009 DL thì tính ra là ngày 1-6-2009 AL. Nếu là tháng bình thường thì đúng nhưng bắt đầu từ ngày 23-6-2009 DL đến ngày 21-7-2009 DL sẽ nhuận 1 tháng thì âm lịch vẫn là tháng 5 chứ không phải tháng 6.
Thân chào bác.
Comment
-
Hi, mhl167 bạn đọc kỹ và hiểu code trong các bài viết trên chưa mà dám nói chắc vậy? code trên không mắc lỗi như bạn nói đâu.PCT COMPUTER
(Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)
Comment
-
Mình ko lập nhiều thông tin như chủ thớt, bảng tra của mình chỉ gồm:
- Ngày âm đầu tiên trong tháng
- Ngày âm cuối cùng trong tháng
- Tổng số ngày DL trong tháng.
Với từng này tham số là đủ rồi. CÒn việc thêm nhuận thì chỉ cần gán cụ thể cho tháng đó, năm đó là đc. Chỉ cần đồng hồ chạy đc 5 năm là ổn lắm rồi_Tuổi thọ thế là ok. Hơn hẳn mấy cái đồng hồ bán ở thị trường, chóng hỏng kinh khủng.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Nguyên văn bởi pctcom Xem bài viếtHi, mhl167 bạn đọc kỹ và hiểu code trong các bài viết trên chưa mà dám nói chắc vậy? code trên không mắc lỗi như bạn nói đâu.
Theo code của bác thì tính như sau:
DL2009_6: DB 9,5,23,5,30
1) MOV B,NGAY ; NGAY hien tai
MOV A,N_DL_DAU_THANG ; tru di ngay duong lich tuong ung voi mung 1 am lich trong thang
CLR C
SUBB A,B
Thì ngày hiện tại là ngày 23, ngày DL đầu tháng là ngày 23 (luu trong dữ liệu DL2009_6)
Gán cờ C=0
23-23=0 suy ra cờ C=0.Tiếp theo:
2) JC SET_NGAY ;
MOV THANG_AL,T_AL_DAU_T_DL ;NGAY HT Lon HON NGAY DAU THANG AL thi Thang_al = T_AL_DAU_T_DL
MOV A,NGAY ;THI NGAY AL = NGAY AL DAU THANG + NGAY HT
MOV B,N_AL_DAU_THANG
ADD A,B
DEC A
CJNE A,#31,CAT_NGAY_AL
MOV A,#1
INC THANG_AL
Tháng AL=T_AL_DAU_T_DL = 5 (luu trong dữ liệu DL2009_6)
Ngày AL= Ngày hiện tại + N_AL_DAU_THANG -1 = 23+9-1=31
So sánh với 31 thì bằng với 31 nên gán Ngày AL=1 và tăng Tháng AL lên 1 tức là Tháng AL=5+1=6
3) CAT_NGAY_AL:
MOV NGAY_AL,A
MOV A,THANG_AL
CJNE A,#13,EXIT_SET_NGAY
MOV THANG_AL,#1
LJMP EXIT_SET_NGAY
Còn đoạn lênh này thì không ảnh hưởng đến ngày tháng AL trên và tháng AL chưa đến 13
Các bác xem mình giải thích vậy đúng chưa? Có gì góp ý thêm.
Đây là diễn đàn để chia sẻ và học hỏi kiến thức lẫn nhau nên có góp ý thì cần nên lịch sự nhé.
Thân chào bác.
Comment
-
Thực sự mình thấy code của bác ptc.com rất hay. Bản thân mình học hỏi được rất nhiều. Mình chỉ đưa ra vài ý kiến vậy thôi chứ bản thân mình không dám chỉ trích ai cả. Mong anh em diễn đàn hiểu cho. Bác chia sẻ giải thuật cho anh em diễn đàn thì biết bác rất nhiệt tình lắm rồi. Thanks bác 100 cái luôn.
Comment
-
Các bác có thể vô trang này để tra âm lịch:
Am lich - Tra cuu am lich - Chuyen doi am lich Duong lich
Comment
-
Mình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.Last edited by hoangdai; 27-12-2011, 00:56.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Nguyên văn bởi hoangdai Xem bài viếtMình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.
Ngày DL 24-5-2009 có ngày AL là 1-5-2009 và ngày DL 23-6-2009 có ngày AL cũng là 1-5-2009.
Nguyên nhân vì sao? Vì nếu âm lịch không lặp lại thì sẽ đi trước dương lịch, dương lịch trong 1 tháng có tối đa 31 ngày còn âm lịch thì tối đa tới 30 ngày thôi.
Do đó các bạn lập trình nên lưu ý. Mình đã rồi nên lưu ý cho các bạn.
Chúc mọi người vui vẻ.
Thân chào.
Comment
-
Vấn đề bác đưa ra thì thuật toán của chủ thớt vẫn xử lý đc vì trong bảng tra đã chỉ rõ tháng AL đầu tháng DL và tháng AL trong tháng DL( Hơi loằng ngoằng tí). Có 1 điều thú vị nữa là sẽ xuất hiện tháng mà ko có ngày mùng 1 âm lịch ( Tháng 2(DL) năm 2014), như vậy chúng ta khi làm bảng nhớ thêm ngày cho tháng 2 này để nó có ngày mùng 1 AL nhé. Đồng hồ mình làm bán chạy rất tốt(có tham khảo thêm cách của chủ thớt để tốt hơn), mong rằng các bạn hiểu đc cách làm và có thuật toán hay cho riêng mình.
Với code C thì chỉ mất có chừng 10 dòng là đã có ngày AL và tháng AL rồi.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Nguyên văn bởi hoangdai Xem bài viếtMình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.
;ngày AL dau thang; thang AL dau thang; ngay dl dau thang AL;thang AL cua dau thang AL; so ngay DL trong thang
Với 5 biến này vấn đề trên của bạn sẽ được giải quyết thật dễ dàng.Last edited by pctcom; 11-01-2012, 13:51.PCT COMPUTER
(Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)
Comment
-
Đọc TUT này thanhks các bác rất nhiều! Tui có ý này nói ra không biết có đúng không ? Có phải tháng nào mà chỉ 1 tháng âm lịch thì cứ phán đại ngày DL đầu tháng Al > tổng số ngày trong tháng là OK bởi vì
Tính ngày Âm lịch:
Nếu (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) bằng (ngày hiện tại) thì ngày Âm lịch bằng 1(không xảy ra trường hợp này vì giả thiết ở trên)
(N_DL_DAU_THANG = NGAY => NGAY_AL = 1)
Hoặc (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) trừ (ngày hiện tại): (N_DL_DAU_THANG - NGAY) :Xảy ra C=0 vì luôn lớn hơn
- Nếu không có nhớ (C=0) thì ngày Âm lịch bằng (ngày Dương lịch hiện tại) cộng (ngày Âm lịch của đầu tháng Dương lịch) rồi trừ 1
(NGAY_AL = ((NGAY + N_AL_DAU_THANG)-1) Trường hợp này luôn đúng vì không liên quan gì tới ngày DL đầu tháng AL
- Nếu có nhớ (C=1) thì ngày Âm lịch hiện tại bằng (ngày Dương lịch hiện tại) trừ (ngày Dương lịch đầu tháng Âm lịch) rồi + 1
(NGAY_AL = ((NGAY - N_DL_DAU_THANG)+1)
Còn tháng AL đầu tháng AL thì bằng tháng AL đầu tháng DL là OK phải không các bác
Kiểm chứng
DL2014_2: DB 2,1,30,2,28 ;không có ngày 1AL có thể sửa lại là 2,1,31,1,28 hoặc 2,1,29,1,28
vì N_DL_DAU_THANG =29,30,31 điều >28 -->ngày âm= 12(dương)+2-1=13
Còn tháng với năm thì luôn bằng 1 -2014
Có lỗi chỗ nào các bác chỉ với nha. ThanksLast edited by tienhuypro; 12-01-2012, 01:17.
Email:
Tel: 0983.497.310
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment