Đ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
-
Chào bác pct.comNguyê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
-
Vậy là bạn đã nhìn ra vấn đề. Vì nếu để ý kỹ các bạn sẽ thấy sẽ có 2 tháng dương lịch liên tiếp có cùng 1 tháng âm lịch. Tôi lấy ví dụ như sau: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
-
Đó là lý do tại sao bảng tôi lập bao gồm 5 biến: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 LÀM BOARD Cho ARDUINObởi NannaMấy ông tín đồ Adruino có kit có thể làm thử xem thế nào !
————————————————————————
skysmotor.co.uk bán các sản phẩm sau trực tuyến: động cơ bước, động cơ servo, trình điều khiển động cơ bước, hộp số hành tinh và có thể mua trực tuyến nếu cần.-
Channel: Kiến thức chung về chip khả trình
hôm nay, 15:12 -
-
bởi opthaianTrong quy trình sản xuất rượu, việc lựa chọn thiết bị chưng cất phù hợp không chỉ ảnh hưởng đến chất lượng thành phẩm mà còn quyết định hiệu quả kinh doanh lâu dài của mỗi xưởng sản xuất. Đặc biệt với các xưởng nhỏ, thách...
-
Channel: Góp ý cho diễn đàn
hôm nay, 12:00 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment