Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Vietnamese Lunar Calendar for .NET

4.20/5 (9 votes)
18 May 2012CPOL1 min read 1   3.8K  
Implementation of Âm lịch Việt Nam for Microsoft.NET

Introduction  

This is an implementation of Am lich VN (http://www.informatik.uni-leipzig.de/~duc/amlich/) in C# / .NET 2.0. It's useful to calculate the Vietnamese lunar date in a .NET application (and I hope this source code may be used as a build-in for the Microsoft .NET Framework).

Background

This article uses the algorithm of author Ho Ngoc Duc (http://www.informatik.uni-leipzig.de/~duc/) to make a VietnameseCalendar class (it's similar to the ChineseLunarCalendar class - a build-in of Microsoft .NET 2.0).

Using the Code

You may use this class to convert a solar date (Gregorian calendar) to a Vietnamese lunar date and vice versa.

C#
// From VN lunar date to solar date
DateTime d = new DateTime(2008, 9, 1, new VietnameseCalendar());
Console.WriteLine("Solar date of Vietnam New Year - Mau Ty = '{0}'", d);   
C#
// From solar date to VN lunar date
VietnameseCalendar vCal = new VietnameseCalendar();
DateTime dt = new DateTime(2008, 9, 30);
vCal.FromDateTime(dt, out y, out m, out d);
Console.WriteLine("VN lunar date of 2008/9/30 = 'Nam {0} - {1}({1}) - Ngay {3} ({4})
 - Gio bat dau: {5} - Tiet {6}, Gio Hoang dao: {7}",
  VietnameseCalendar.GetYearName(y),
  VietnameseCalendar.GetMonthSpeechName(y, m),
  VietnameseCalendar.GetMonthName(y, m),
  d, VietnameseCalendar.GetDayName(dt),
  VietnameseCalendar.GetHourZeroName(dt),
  VietnameseCalendar.GetMinorSolarTerms(dt),
  VietnameseCalendar.GetPropitiousHour(dt));      

* You can use this class to get VN lunar start hour of a day; or get Minor solar terms; Propitious hours in a day,... 

* A Vietnam lunar month can be 1 to 13 (because of leap-month) as a numeric. Example:
   VN Lunar year 1979 has leap-month: 6
   So this year has 13 months (from 1 to 13, as an int) like:
    [1], [2] ... [5], [6], [7 => 6(N)], [8 (=> 7)], [9] ... [13]
   So, if you convert 1979-9-17, you will received 1979/8/26 as output numbers, but string will be "26, Tháng Bảy, Năm Kỷ Mùi" (if you use the method: GetMonthSpeechName(y, m))

Points of Interest

This class has been tested by unit-testing (in the attached file). Here is that class diagram:

VietnameseCalendar_dotnet2_src

History 

  • 16th October, 2008: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)