|
| 1 | +using System; |
| 2 | +using System.Collections.Generic; |
| 3 | +using System.Globalization; |
| 4 | + |
| 5 | +namespace JapaneseDates |
| 6 | +{ |
| 7 | + class Program |
| 8 | + { |
| 9 | + static void Main(string[] args) |
| 10 | + { |
| 11 | + // BAD: hard-coded era start date |
| 12 | + var henseiStart = new DateTime(1989, 1, 8); |
| 13 | + |
| 14 | + // BAD: hard-coded era start dates, list |
| 15 | + List<DateTime> listOfEraStart = new List<DateTime> { new DateTime(1989, 1, 8) }; |
| 16 | + |
| 17 | + // BAD: hardcoded era name |
| 18 | + string currentEra = "Heisei"; |
| 19 | + |
| 20 | + DateTimeOffset dateNow = DateTimeOffset.Now; |
| 21 | + |
| 22 | + DateTimeOffset dateThisEra = new DateTimeOffset(1989, 1, 8, 0, 0, 0, 0, TimeSpan.Zero); |
| 23 | + |
| 24 | + CultureInfo japaneseCulture = CultureInfo.GetCultureInfo("ja-JP"); |
| 25 | + |
| 26 | + JapaneseCalendar jk = new JapaneseCalendar(); |
| 27 | + |
| 28 | + // BAD: datetime is created from constant year in the current era, and the result will change with era change |
| 29 | + var datejkCurrentEra = jk.ToDateTime(32, 2, 1, 9, 9, 9, 9); |
| 30 | + Console.WriteLine("Date for datejkCurrentEra {0} and year {1}", datejkCurrentEra.ToString(japaneseCulture), jk.GetYear (datejkCurrentEra)); |
| 31 | + |
| 32 | + // BAD: datetime is created from constant year in the current era, and the result will change with era change |
| 33 | + var datejk = jk.ToDateTime(32, 2, 1, 9, 9, 9, 9, 0); |
| 34 | + Console.WriteLine("Date for jk {0} and year {1}", datejk.ToString(japaneseCulture), jk.GetYear (datejk)); |
| 35 | + |
| 36 | + // OK: datetime is created from constant year in the specific era, and the result will not change with era change |
| 37 | + var datejk1 = jk.ToDateTime(32, 2, 1, 9, 9, 9, 9, 4); |
| 38 | + Console.WriteLine("Date for jk {0} and year {1}", datejk1.ToString(japaneseCulture), jk.GetYear (datejk1)); |
| 39 | + |
| 40 | + // OK: year is not hard-coded, i.e. it may be updated |
| 41 | + var datejk0 = jk.ToDateTime(jk.GetYear(datejk), 2, 1, 9, 9, 9, 9); |
| 42 | + Console.WriteLine("Date for jk0 {0} and year {1}", datejk0, jk.GetYear(datejk0)); |
| 43 | + |
| 44 | + // BAD: hard-coded year conversion |
| 45 | + int realYear = 1988 + jk.GetYear(datejk); |
| 46 | + Console.WriteLine("Which converts to year {0}", realYear); |
| 47 | + |
| 48 | + // BAD: creating DateTime using specified Japanese era date. This may yield a different date when era changes |
| 49 | + DateTime val = new DateTime(32, 2, 1, new JapaneseCalendar()); |
| 50 | + Console.WriteLine("DateTime from constructor {0}", val); |
| 51 | + |
| 52 | + // OK: variable data for Year, not necessarily hard-coded and can come from adjusted source |
| 53 | + DateTime val1 = new DateTime(jk.GetYear(datejk), 2, 1, new JapaneseCalendar()); |
| 54 | + Console.WriteLine("DateTime from constructor {0}", val); |
| 55 | + } |
| 56 | + } |
| 57 | +} |
0 commit comments