thuật toán đổi lịch dương sang lịch âm
Loại hình nghệ thuật này ẩn chứa sự tuyệt mỹ mê hồn, đưa người xem lạc vào cõi tiên của những nét dịu dàng, mềm mại thướt tha, nơi tỏa sáng của những cô tiên nữ với mảnh lụa cùng tâm hồn thuần khiết say đắm lòng người. Cách đây hơn 5000 năm lịch sử, khi võ
II. Ý nghĩa và tác động của cách mạng khoa học - kĩ thuật. 1. Ý nghĩa - Cuộc cách mạng khoa học - kĩ thuật có ý nghĩa vô cùng lớn lao, như một cột mốc lớn chói lọi trong lịch sử tiến hóa văn minh loài người . - Mang những tiến bộ phi thường, những thành tựu kì diệu.
Chúng ta biết, với Dương lịch, một năm sẽ có 365 hoặc 366 ngày (đối với năm nhuận). Trong khi đó Âm lịch lại khác, chu kỳ quay của Mặt trăng quanh Trái đất chỉ là 29,53 ngày nên một năm Âm lịch chỉ có 354 ngày, so với năm Dương lịch ngắn hơn 11 ngày. Vì vậy, cứ sau 3 năm sẽ chênh lệch đến 33 ngày, tức là chênh nhau hơn 1 tháng.
Evay Vay Tiền. // Convert 14/1/1998 January 14th 1998 to lunar day int[] lunarDay = 1, 1998, // is fixed timezone of Vietnam // lunarDay = [17, 12, 1997, => 14/1/1998 solar -> 17/12/1997 lunar
Trong bài viết này chúng tôi xin giới thiệu tới các bạn bài Hướng dẫn cách đổi Dương sang lịch Âm và ngược lại với hai cách đó là thuật toán để lập trình và hàm Excel sử dụng trong công việc văn phòng hàng ngày. Bài viết sau giới thiệu cách tính âm lịch Việt Nam và mô tả một số thuật toán dùng để chuyển đổi giữa ngày dương lịch và ngày âm lịch. Các thuật toán mô tả ở đây đã được đơn giản hóa nhiều để bạn đọc tiện theo dõi và dễ dàng sử dụng vào việc lập trình, do đó độ chính xác của chúng thấp hơn độ chính xác của chương trình âm lịch trực tuyến tại Một phiên bản cũ của bài viết này giới thiệu vài thuật toán hơi khác, có thể khó thực hiện hơn một chút. Quy luật của âm lịch Việt Nam Âm lịch Việt Nam là một loại lịch thiên văn. Nó được tính toán dựa trên sự chuyển động của mặt trời, trái đất và mặt trăng. Ngày tháng âm lịch được tính dựa theo các nguyên tắc sau Ngày đầu tiên của tháng âm lịch là ngày chứa điểm Sóc Một năm bình thường có 12 tháng âm lịch, một năm nhuận có 13 tháng âm lịch Đông chí luôn rơi vào tháng 11 âm lịch Trong một năm nhuận, nếu có 1 tháng không có Trung khí thì tháng đó là tháng nhuận. Nếu nhiều tháng trong năm nhuận đều không có Trung khí thì chỉ tháng đầu tiên sau Đông chí là tháng nhuận Việc tính toán dựa trên kinh tuyến 105° đông. Sóc là thời điểm hội diện, đó là khi trái đất, mặt trăng và mặt trời nằm trên một đường thẳng và mặt trăng nằm giữa trái đất và mặt trời. Như thế góc giữa mặt trăng và mặt trời bằng 0 độ. Gọi là "hội diện" vì mặt trăng và mặt trời ở cùng một hướng đối với trái đất. Chu kỳ của điểm Sóc là khoảng 29,5 ngày. Ngày chứa điểm Sóc được gọi là ngày Sóc, và đó là ngày bắt đầu tháng âm lịch. TRA CỨU THẦN SỐ HỌC ONLINE Xem Đường Đời, Sự Nghiệp, Tình Duyên, Vận Mệnh, Các Năm Đỉnh Cao Cuộc Đời... Trung khí là các điểm chia đường hoàng đạo thành 12 phần bằng nhau. Trong đó, bốn Trung khí giữa bốn mùa là đặc biệt nhất Xuân phân khoảng 20/3, Hạ chí khoảng 22/6, Thu phân khoảng 23/9 và Đông chí khoảng 22/12. Bởi vì dựa trên cả mặt trời và mặt trăng nên lịch Việt Nam không phải là thuần âm lịch mà là âm-dương-lịch. Theo các nguyên tắc trên, để tính ngày tháng âm lịch cho một năm bất kỳ trước hết chúng ta cần xác định những ngày nào trong năm chứa các thời điểm Sóc New moon . Một khi bạn đã tính được ngày Sóc, bạn đã biết được ngày bắt đầu và kết thúc của một tháng âm lịch ngày mùng một của tháng âm lịch là ngày chứa điểm sóc. Sau khi đã biết ngày bắt đầu/kết thúc các tháng âm lịch, ta tính xem các Trung khí Major solar term rơi vào tháng nào để từ đó xác định tên các tháng và tìm tháng nhuận. Đông chí luôn rơi vào tháng 11 của năm âm lịch. Bởi vậy chúng ta cần tính 2 điểm sóc Sóc A ngay trước ngày Đông chí thứ nhất và Sóc B ngay trước ngày Đông chí thứ hai. Nếu khoảng cách giữa A và B là dưới 365 ngày thì năm âm lịch có 12 tháng, và những tháng đó có tên là tháng 11, tháng 12, tháng 1, tháng 2, …, tháng 10. Ngược lại, nếu khoảng cách giữa hai sóc A và B là trên 365 ngày thì năm âm lịch này là năm nhuận, và chúng ta cần tìm xem đâu là tháng nhuận. Để làm việc này ta xem xét tất cả các tháng giữa A và B, tháng đầu tiên không chứa Trung khí sau ngày Đông chí thứ nhất là tháng nhuận. Tháng đó sẽ được mang tên của tháng trước nó kèm chữ "nhuận". Khi tính ngày Sóc và ngày chứa Trung khí bạn cần lưu ý xem xét chính xác múi giờ. Đây là lý do tại sao có một vài điểm khác nhau giữa lịch Việt Nam và lịch Trung dụ, nếu bạn biết thời điểm hội diện là vào lúc yyyy-02-18 162445 GMT thì ngày Sóc của lịch Việt Nam là 18 tháng 2, bởi vì 162445 GMT là 232445 cùng ngày, giờ Hà nội GMT+7, kinh tuyến 105° đông. Tuy nhiên theo giờ Bắc Kinh GMT+8, kinh tuyến 120° đông thì Sóc là lúc 002445 ngày yyyy-02-19, do đó tháng âm lịch của Trung Quốc lại bắt đầu ngày yyyy-02-19, chậm hơn lịch Việt Nam 1 ngày. Ví dụ 1 Âm lịch năm 1984 Chúng ta áp dụng quy luật trên để tính âm lịch Việt nam năm 1984. Sóc A ngay trước Đông chí năm 1983 rơi vào ngày 4/12/1983, Sóc B ngay trước Đông chí năm 1984 vào ngày 23/11/1984. Giữa A và B là khoảng 355 ngày, như thế năm âm lịch 1984 là năm thường. Tháng 11 âm lịch của năm trước kéo dài từ 4/12/1983 đến 2/01/1984, tháng 12 âm từ 3/1/1984 đến 1/2/1984, tháng Giêng từ 2/2/1984 đến 1/3/1984 Ví dụ 2 Âm lịch năm 2004 Sóc A - điểm sóc cuối cùng trước Đông chí 2003 - rơi vào ngày 23/11/2003. Sóc B ngay trước Đông chí năm 2004 rơi vào ngày 12/12/2004. Giữa 2 ngày này là khoảng 385 ngày, như vậy năm âm lịch 2004 là năm nhuận. Tháng 11 âm của năm 2003 bắt đầu vào ngày chứa Sóc A, tức ngày 23/11/2003. Tháng âm lịch đầu tiên sau đó mà không chứa Trung khí là tháng từ 21/3/2004 đến 18/4/2004 Xuân phân rơi vào 20/3/2004, còn Cốc vũ là 19/4/2004. Như thế tháng ấy là tháng nhuận. Từ 23/11/2003 đến 21/3/2004 là khoảng 120 ngày, tức 4 tháng âm lịch tháng 11, 12, 1 và 2. Như vậy năm 2004 có tháng 2 nhuận. Thuật toán chuyển đổi giữa ngày dương và âm Trong tính toán thiên văn người ta lấy ngày 1/1/4713 trước công nguyên của lịch Julius tức ngày 24/11/4714 trước CN theo lịch Gregorius làm điểm gốc. Số ngày tính từ điểm gốc này gọi là số ngày Julius Julian day number của một thời điểm. Ví dụ, số ngày Julius của 1/1/2000 là 24515455. Dùng các công thức sau ta có thể chuyển đổi giữa ngày/tháng/năm và số ngày Julius. Phép chia ở 2 công thức sau được hiểu là chia số nguyên, bỏ phần dư 23/4=5. Đổi ngày dd/mm/yyyy ra số ngày Julius jda = 14 - mm / 12y = yy+4800-am = mm+12*a-3 Lịch Gregory jd = dd + 153*m+2/5 + 365*y + y/4 - y/100 + y/400 - 32045 Lịch Julius jd = dd + 153*m+2/5 + 365*y + y/4 - 32083 Đổi số ngày Julius jd ra ngày dd/mm/yyyy Lịch Gregory jd lớn hơn 2299160 a = jd + 32044;b = 4*a+3/146097;c = a - b*146097/4; Lịch Julius b = 0;c = jd + 32082; Công thức cho cả 2 loại lịch d = 4*c+3/1461;e = c - 1461*d/4;m = 5*e+2/153;dd = e - 153*m+2/5 + 1;mm = m + 3 - 12*m/10;yy = b*100 + d - 4800 + m/10; Nếu ngôn ngữ lập trình bạn dùng không hỗ trợ phép chia số nguyên bỏ phần dư VD JavaScript, bạn có thể định nghĩa một hàm INTx để lấy số nguyên lớn nhất không vượt quá x INT5=5, INT INT-5=-5, INT Khi đó, INTm/10 sẽ trả lại kết quả của phép chia số nguyên. Nhiều ngôn ngữ có sẵn hàm floor cho phép làm việc này. Các phép chuyển đổi giữa ngày tháng và số ngày Julius có thể được thực hiện với mã JavaScript như sau function jdFromDatedd, mm, yy var a, y, m, jd;a = INT14 - mm / 12;y = yy+4800-a;m = mm+12*a-3;jd = dd + INT153*m+2/5 + 365*y + INTy/4 - INTy/100 + INTy/400 - 32045;if jd 2299160 { // After 5/10/1582, Gregorian calendar a = jd + 32044; b = INT4*a+3/146097; c = a - INTb*146097/4;} else { b = 0; c = jd + 32082;}d = INT4*c+3/1461;e = c - INT1461*d/4;m = INT5*e+2/153;day = e - INT153*m+2/5 + 1;month = m + 3 - 12*INTm/10;year = b*100 + d - 4800 + INTm/10;return new Arrayday, month, year; Trong các công thức sau, timeZone là số giờ chênh lệch giữa giờ địa phương và giờ UTC hay GMT. Để tính lịch Việt Nam, lấy timeZone = Các phương pháp sau được giới thiệu với mã JavaScript. Bạn có thể tải thư viện JavaScript hoặc thư viện PHP hoàn chỉnh để tham khảo. Tính ngày Sóc Như trên đã nói, để tính được âm lịch trước hết ta cần xác định các tháng âm lịch bắt đầu vào ngày nào. Thuật toán sau tính ngày Sóc thứ k kể từ điểm Sóc ngày 1/1/1900. Kết quả trả về là số ngày Julius của ngày Sóc cần tìm. function getNewMoonDayk, timeZone var T, T2, T3, dr, Jd1, M, Mpr, F, C1, deltat, JdNew;T = k/ // Time in Julian centuries from 1900 January = T * T;T3 = T2 * T;dr = PI/180;Jd1 = + + - = Jd1 + + - // Mean new moonM = + - - // Sun's mean anomalyMpr = + + + // Moon's mean anomalyF = + - - // Moon's argument of latitudeC1= - + = C1 - + = C1 - = C1 + - = C1 - + = C1 - - = C1 + + T = 9 { nm = getNewMoonDayk-1, timeZone;}return nm; Xác định tháng nhuận Nếu giữa hai tháng 11 âm lịch tức tháng có chứa Đông chí có 13 tháng âm lịch thì năm âm lịch đó có tháng nhuận. Để xác định tháng nhuận, ta sử dụng hàm getSunLongitude như đã nói ở trên. Cho a11 là ngày bắt đầu tháng 11 âm lịch mà một trong 13 tháng sau đó là tháng nhuận. Hàm sau cho biết tháng nhuận nằm ở vị trí nào sau tháng 11 này. function getLeapMonthOffseta11, timeZone var k, last, arc, i;k = INTa11 - / + = 0;i = 1; // We start with the month following lunar month 11arc = getSunLongitudegetNewMoonDayk+i, timeZone, timeZone;do { last = arc; i++; arc = getSunLongitudegetNewMoonDayk+i, timeZone, timeZone;} while arc != last && i dayNumber { monthStart = getNewMoonDayk, timeZone;}a11 = getLunarMonth11yy, timeZone;b11 = a11;if a11 >= monthStart { lunarYear = yy; a11 = getLunarMonth11yy-1, timeZone;} else { lunarYear = yy+1; b11 = getLunarMonth11yy+1, timeZone;}lunarDay = dayNumber-monthStart+1;diff = INTmonthStart - a11/29;lunarLeap = 0;lunarMonth = diff+11;if b11 - a11 > 365 { leapMonthDiff = getLeapMonthOffseta11, timeZone; if diff >= leapMonthDiff { lunarMonth = diff + 10; if diff == leapMonthDiff { lunarLeap = 1; } }}if lunarMonth > 12 { lunarMonth = lunarMonth - 12;}if lunarMonth >= 11 && diff 365 { leapOff = getLeapMonthOffseta11, timeZone; leapMonth = leapOff - 2; if leapMonth = leapOff { off += 1; }}k = INT + a11 - / = getNewMoonDayk+off, timeZone;return jdToDatemonthStart+lunarDay-1; Tính ngày thứ và Can-Chi cho ngày và tháng âm lịch Ngày thứ lặp lại theo chu kỳ 7 ngày, như thế để biết một ngày d/m/y bất kỳ là thứ mấy ta chỉ việc tìm số dư của số ngày Julius của ngày này cho 7. Để tính Can của năm Y, tìm số dư của Y+6 chia cho 10. Số dư 0 là Giáp, 1 là Ất Để tính Chi của năm, chia Y+8 cho 12. Số dư 0 là Tý, 1 là Sửu, 2 là Dần Hiệu Can-Chi của ngày lặp lại theo chu kỳ 60 ngày, như thế nó cũng có thể tính được một cách đơn giản. Cho N là số ngày Julius của ngày dd/mm/yyyy. Ta chia N+9 cho 10. Số dư 0 là Giáp, 1 là Ất Để tìm Chi, chia N+1 cho 12; số dư 0 là Tý, 1 là Sửu Trong một năm âm lịch, tháng 11 là tháng Tý, tháng 12 là Sửu, tháng Giêng là tháng Dần Can của tháng M năm Y âm lịch được tính theo công thức sau chia Y*12+M+3 cho 10. Số dư 0 là Giáp, 1 là Ất Ví dụ, Can-Chi của tháng 3 âm lịch năm Giáp Thân 2004 là Mậu Thìn tháng 3 âm lịch là tháng Thìn, và 2004*12+3+3 % 10 = 24054 % 10 = 4, như vậy Can của tháng là Mậu. Một tháng nhuận không có tên riêng mà lấy tên của tháng trước đó kèm thêm chữ "Nhuận", VD tháng 2 nhuận năm Giáp Thân 2004 là tháng Đinh Mão nhuận. Tài liệu tham khảo Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations Helmer Aslaksen, The Mathematics of the Chinese Calendar Eric Weisstein's World of Astronomy Calendar FAQ Open source implementation of many astronomical functions Hồ Ngọc Đức, Âm lịch Việt Nam qua các thời kỳ lịch sử Hồ Ngọc Đức, - Một chương trình Java nhỏ 300 dòng để chuyển đổi âm dương lịch Hồ Ngọc Đức, JavaScript lunar calendar - Chương trình âm lịch Việt Nam bằng JavaScript sử dụng bảng tính sẵn cho thời kỳ 1800-2199 Tính âm lịch dùng các ngôn ngữ khác JavaScript, PHP, Visual Basic, Python chương trình Visual Basic và Python do Nguyễn Quốc Sản đóng góp Đổi ngày âm qua dương bằng các ứng dụng online Điều kiện để chuyển đổi ngày âm dương theo cách này là bạn cần có các thiết bị điện tử kết nối với mạng Internet. Cách đổi này vô cùng tiện lợi và nhanh chóng. Bạn có thể tải các phần mềm chuyển đổi từ kho ứng dụng như CH play đối với hệ điều hành Android hoặc Apple Store nếu sử dụng hệ điều hành IOS. Hoặc nếu bạn không muốn mất thời gian download và tốn bộ nhớ điện thoại, bạn hoàn toàn có thể đổi âm lịch sang dương lịch bằng các thao tác sau đây Đầu tiên bạn truy cập vào trang web có hỗ trợ công cụ chuyển đổi ngày âm sang dương. Tiếp theo, nhập ngày tháng năm Âm lịch mà bạn muốn chuyển đổi. Sau đó nhấn vào nút Xem kết quả Chờ khoảng vài giây, bạn sẽ thấy bên dưới là kết quả chuyển đổi ngày âm sang ngày dương hiển thị đầy đủ. Thậm chí có thêm cả các thông tin về giờ hoàng đạo, hắc đạo, các tuổi xung khắc để tiện cho bạn tham khảo. Cách chuyển lịch âm sang dương bằng thuật toán Excel Trong trường hợp máy tính nhà bạn không có kết nối mạng Internet để truy cập vào các trang web đổi ngày âm ra ngày dương online, bạn cũng có thể đổi được bằng các thuật toán có trong Excel. Tuy nhiên, hiện nay Excel vẫn chưa cho phép người dùng có thể đổi lịch âm dương trực tiếp bằng các hàm sẵn có. Do đó, để thực hiện việc đổi lịch âm dương trong Excel, bạn cần thực hiện các thao tác sau đây Đầu tiên, để tự tạo hàm chuyển đổi lịch âm dương bạn cần có bộ code lập trình VBA. Việc xây dựng bộ code này khá phức tạp. Do đó để tiết kiệm thời gian, bạn có thể tìm kiếm code VBA chuyển đổi lịch âm dương do các bạn lập trình viên soạn sẵn để sử dụng. Tiếp theo bạn mở file Excel lên, nhấn phím Alt +F11 để bật chương trình VBA Sau đó vào Insert > Module . Bạn dán đoạn code đã copy ở trên vào khung soạn thảo Quay trở lại bảng tính Excel, để chuyển lịch âm dương bạn sử dụng hàm TRANSSOLAR theo cú pháp như hình bên dưới. Như vậy chỉ với các thao tác đơn giản trên đây, bạn đã có thể chuyển đổi lịch âm dương một cách nhanh chóng và chính xác. Cám ơn bạn đã theo dõi bài viết và đừng -quên chia sẻ những thông tin hữu ích này cho gia đình, bạn bè của bạn nhé. Tử Vi Tân Sửu 2021 Của 12 Con GiápTử vi tuổi Tí năm 2021Tử vi tuổi Sửu năm 2021Tử vi tuổi Dần năm 2021Tử vi tuổi Mão năm 2021Tử vi tuổi Thìn năm 2021Tử vi tuổi Tỵ năm 2021Tử vi tuổi Ngọ năm 2021Tử vi tuổi Mùi năm 2021Tử vi tuổi Thân năm 2021Tử vi tuổi Dậu năm 2021Tử vi tuổi Tuất năm 2021Tử vi tuổi Hợi năm 2021 Sao hạn là gì? Hướng dẫn Cách tính sao hạn CHÍNH XÁC NHẤT THÁI ĐỘ CỦA 14 CHÍNH TINH – TRONG CHUYỆN TÌNH CẢM Tìm hiểu về bộ sao Tuần Triệt trong tử vi Tìm hiểu và phân tích sáu sao Lục Bại tinh Bát tự Hà Lạc là gì? Tìm hiểu và các xem vận mệnh bằng Bát tự Hà Lạc? Bát tự huyền không là gì? Có phải là một bộ môn trong tử vi không? Bát tự ngũ hành là gì? Ứng dụng của ngũ hành như thế nào? Sự khác nhau Tứ trụ và Tử vi? Xem vận mệnh bằng bộ môn nào chính xác hơn? Bát tự là gì? Xem Tử Vi Theo Bát Tự Có Đúng Không? Tổng hợp kinh nghiệm xem lá số tử vi Cự Vũ Tiên Sinh
Đề bài Nhập vào năm >100 sau đó cho biết năm ứng với âm lịch. Lấy năm dương lịch – 3 sau đó 1. chia cho 10 ta được số dư là thiên can Giáp, Ất, Bính, Đinh, Mậu, Kỷ, Canh, Tân, Nhâm, Quý. 2. chia cho 12 số dư chính là địa chi. Tý, Sửu, Dần, Mẹo, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi. Program doi_nam_duong_lich_sang_am_lich; uses crt; Const N=5; var a,tc,dcinteger; ibyte; Begin For i=0 to n do Begin Clrscr; write'nhap nam duong lich '; readlna; if a>100 then begin Write'Nam ',a,' doi qua am lich la '; tc=a-3mod 10; Case tc of 1 Write'Giap'; 2 Write'At'; 3 Write'Binh'; 4 Write'Dinh'; 5 Write'Mau'; 6 Write'Ky'; 7 Write'Canh'; 8 Write'Tan'; 9 Write'Nham'; 10Write'Quy'; End; Write' '; Case a-3 mod 12 of 1 Write'ti'; 2 Write'suu'; 3 Write'dan'; 4 Write'mao'; 5 Write'thin'; 6 Write'ty'; 7 Write'ngo'; 8 Write'mui'; 9 Write'than'; 10 Write'dau'; 11 Write'tuat'; 12 Write'hoi'; End; end * if * else writeln'phai nhap nam lon hon nam 100'; readln; End; * for * End. 4 4 votes Đánh giá bài viết
thuật toán đổi lịch dương sang lịch âm