Thư Viện Chuyển đổi Âm – Dương Lịch Viết Trên VB, C# (theo Thuật ...

Chuyển đổi Âm – Dương lịch theo thuật toán của Hồ Ngọc Đức

Mã VB (của Nguyễn Quốc Sản dựa trên thuật toán của Hồ Ngọc Đức)

Download tại đây. (link gốc từ trang của Hồ Ngọc Đức).

Cách sử dụng:

Có thể sử dụng trong Project VB6 hoặc trong Ms Excel, Word,… (dùng VBA).

Chuyển từ dương lịch sang âm lịch
Function Solar2Lunar( _                    ByVal dd As Long, _                    ByVal mm As Long, _                    Optional ByVal yy As Long = 0, _                    Optional ByVal timeZone As Long = 7) As String

Chuyển đổi từ dương lịch sang âm lịch. Nhận ngày (dd), tháng (mm), năm (yy) và múi giờ (mặc định là Việt Nam, tức GMT+7). Kết quả trả về chuỗi.

Ví dụ:

MsgBox Solar2Lunar(16, 4, 2013)

Sẽ cho kết quả 7/3/2013 AL

Chuyển từ âm lịch sang dương lịch
Function Lunar2Solar( _                    ByVal lunarDay As Long, _                    ByVal lunarMonth As Long, _                    Optional ByVal lunarYear As Long = 0, _                    Optional ByVal lunarLeap As Long = 0, _                    Optional ByVal timeZone As Long = 7) As Date

Chuyển đổi từ âm lịch sang dương lịch. Nhân ngày (lunarDay), tháng (lunarMonth), năm (lunarYear) – mặc định là năm hiện tại, nếu năm âm lịch là năm nhuận thì lunarLeap là 1 – mặc định là 0 tức không nhuận, múi giờ mặc định là GMT+7 (Việt Nam). Kết quả trả về Date.

Ví dụ:

MsgBox Lunar2Solar(7,3)

Sẽ cho kết quả 16/4/2013

Mã C# (của tôi, LVL, dựa trên bản Javascript của Hồ Ngọc Đức)

Download tại đây. Download về đổi tên file thành AmLich.cs

Lớp LunarDate cho phép lưu trữ ngày âm lịch.

public class LunarDate { public int Day { get; set; } public int Month { get; set; } public int Year { get; set; } public bool IsLeapYear { get; set; } public LunarDate(){} public LunarDate(int day, int month, int year, bool leap) { Day=day; Month=month; Year=year; IsLeapYear=leap; } public override string ToString() { return Day.ToString() + "/" + Month.ToString() + "/" + Year.ToString() + (IsLeapYear?"N":""); } public DateTime ToSolarDate(int timeZone) { return LunarYearTools.LunarToSolar(this); } public DateTime ToSolarDate() { return ToSolarDate(7); } }

Phương thức ToString đã thực hiện sẵn. Với một Constructor không có tham số và một có 4 tham số để có thể khởi tạo trực tiếp:

LunarDate d1 = new LunarDate(), d2 = new LunarDate(7, 3, 2013, false), d3 = new LunarDate() { Day = 7, Month = 3, Year = 2013, IsLeapYear = false }; MessageBox.Show(d3.ToString()); // Hiển thị 7/3/2013

Chuyển đổi dương lịch – âm lịch

Với kiểu DateTime: phương thức ToLunarDate cho ngày âm lịch tương ứng (kiểu LunarDate)

Với kiểu LunarDate: phương thức ToSolarDate cho ngày dương lịch tương ứng (kiểu DateTime).

Cũng có thể dùng các phương thức SolarToLunar hoặc LunarToSolar của lớp LunarYearTools để chuyển đổi.

DateTime d = new DateTime(2013, 4, 16); LunarDate ld = new LunarDate(7, 3, 2013, false); // Dương lịch -> Âm lịch LunarDate ld1 = d.ToLunarDate(); // Hoặc ld1 = LunarYearTools.SolarToLunar(d); MessageBox.Show(ld1.ToString()); // Hiển thị 7/3/2013 // Âm lịch -> Dương lịch DateTime d1 = ld.ToSolarDate(); // Hoặc d1 = LunarYearTools.LunarToSolar(ld); MessageBox.Show(d1.ToString()); // Hiển thị 16/4/2013
Sử dụng Converter trong XAML (WPF)

Converters tải tại đây

<Window x:Class="AmLich.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:AmLich" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:Solar2LunarConverter x:Key="SolarToLunarConverter"/> <local:Lunar2SolarConverter x:Key="LunarToSolarConverter"/> </Window.Resources> <Grid> <StackPanel Orientation="Vertical"> <DatePicker Margin="5" Name="dtpNgayDL1" SelectedDate="2013-04-16"/> <TextBlock Margin="5" Name="tblNgayAL" Tag="{Binding SelectedDate, Converter={StaticResource SolarToLunarConverter}, ElementName=dtpNgayDL1}" Text="{Binding Tag, RelativeSource={RelativeSource Self}}" /> <DatePicker Margin="5" Name="ddtpNgayDL2" SelectedDate="{Binding Tag, Converter={StaticResource LunarToSolarConverter}, ElementName=tblNgayAL}"/> </StackPanel> </Grid> </Window>

Chia sẻ:

  • Facebook
  • Twitter
Thích Đang tải...

Từ khóa » Cách đổi Lịch Dương Sang âm Của Hồ Ngọc đức