Loại: Class
Ngôn ngữ lập trình: VB .NET
Tác giả: * Bản quyền Hồ Ngọc Đức
* Test, Edit and Translate by vie87vn
* Convert VB .NET 2008 by Kasper
Chức năng: Đổi lịch Âm Dương
Do nhu cầu dùng .NET ngày càng nhiều, tôi thực hiện convert module đổi lịch của HNĐ sang .NET
Cần nói thêm rằng: trong âm lịch, không ai dùng năm theo số mà phải dùng theo can chi, ví dụ 1/1/2009, mà chỉ có 1/1 năm Kỷ Sửu. (Mùng một tháng một năm Kỷ Sửu). Và để hiển thị Dương lịch theo định dạng dd/MM/yyyy, khi convert sang .NET, tôi xây dựng bổ sung cho 2 cấu trúc FakeDate và AllLunarInfo.
- Public Structure FakeDate
- Dim fdDay As Double
- Dim fdMonth As Double
- Dim fdYear As Double
- Sub New(ByVal d As Date)
- fdDay = d.Day
- fdMonth = d.Month
- fdYear = d.Year
- End Sub
- Public Shadows Function ToString()
- Return fdDay & "/" & fdMonth & "/" & fdYear
- End Function
- End Structure
- Public Structure AllLunarInfo
- Dim sDayNameOfWeek As String ' Tên ngày trong tuần
- Dim fdLunarDate As FakeDate ' Ngày, tháng, năm Âm lịch
- Dim dDayOfLeap As Double ' Thuộc tháng nhuận = 1
- Dim dLeap As Double ' Tháng nhuận = 0 là không có
- Dim dLeapMonth As Double ' Nếu có tháng nhuận, trả về tháng đó
- Dim fdLeap2SolarFrom As FakeDate ' Tương ứng với ngày dương lịch từ
- Dim fdLeap2SolarTo As FakeDate ' Tương ứng với ngày dương lịch đến
- Dim dMonthLenght As Double ' Số ngày trong tháng, nếu > 29 thì là tháng đủ
- Dim sVMonthName As String ' Tên tháng gọi theo âm lịch
- Dim sDayCanChi As String
- Dim sMonthCanChi As String
- Dim sYearCanChi As String
- Dim sHourCanChi As String
- Dim sTietKhi As String
- Dim fdStartSolarDateTietKhi As FakeDate ' Ngày đầu tiết khí theo Dương lịch
- Dim fdStartLunarDateTietKhi As FakeDate ' Ngày đầu tiết khí theo Âm lịch
- Public Function ToLunarDate() As String
- ' Định dạng ngày tháng theo âm lịch. Ví dụ 20/11 năm Canh Dần
- Return fdLunarDate.fdDay & "/" & fdLunarDate.fdMonth & " năm " & sYearCanChi
- End Function
- Public Function ToLunarTietKhi() As String
- ' Định dạng ngày tháng theo âm lịch. Ví dụ 20/11 năm Canh Dần
- Return fdStartLunarDateTietKhi.fdDay & "/" & fdStartLunarDateTietKhi.fdMonth & " năm " & sYearCanChi
- End Function
- End Structure
Trong một topic khác có một bạn hỏi anh truongphu về việc convert từ âm lịch sang dương lịch. Sau khi xem code, tôi đã thấy module của HNĐ có hỗ trợ chuyển từ âm lịch sang dương lịch. Sử dụng như sau:
- Dim lunar As New clsLunar
- With lunar.Lunar2Solar(30, 11, 2009, 1, 7)
- MessageBox.Show(.ToString)
- End With
Tôi đính kèm một project sử dụng Lunar.dll
và cuối cùng, mạn phép tác giả sửa lại lỗi chính tả Sonar -> Solar (Dương lịch).