| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace LocalhostMES.Helpers
- {
- /// <summary>
- /// 年/月/日与单字符编码互转(用于本地 SN 等场景)。
- /// </summary>
- public static class DateCodeConverter
- {
- private static readonly Dictionary<int, string> yearToCode = new Dictionary<int, string>
- {
- {2018, "1"}, {2019, "2"}, {2020, "3"}, {2021, "4"}, {2022, "5"},
- {2023, "6"}, {2024, "7"}, {2025, "8"}, {2026, "9"}, {2027, "A"},
- {2028, "B"}, {2029, "C"}, {2030, "D"}, {2031, "E"}, {2032, "F"},
- {2033, "G"}, {2034, "H"}, {2035, "J"}, {2036, "K"}, {2037, "L"},
- {2038, "M"}, {2039, "N"}, {2040, "P"}, {2041, "R"}, {2042, "S"},
- {2043, "T"}, {2044, "V"}, {2045, "W"}, {2046, "X"}, {2047, "Y"},
- {2048, "1"}, {2049, "2"}, {2050, "3"}, {2051, "4"}, {2052, "5"},
- {2053, "6"}, {2054, "7"}, {2055, "8"}, {2056, "9"}, {2057, "A"}
- };
- private static readonly Dictionary<int, string> monthToCode = new Dictionary<int, string>
- {
- {1, "1"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"},
- {7, "7"}, {8, "8"}, {9, "9"}, {10, "A"}, {11, "B"}, {12, "C"}
- };
- private static readonly Dictionary<int, string> dayToCode = new Dictionary<int, string>
- {
- {1, "1"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"},
- {10, "A"}, {11, "B"}, {12, "C"}, {13, "D"}, {14, "E"}, {15, "F"}, {16, "G"},
- {17, "H"}, {18, "J"}, {19, "K"}, {20, "L"}, {21, "M"}, {22, "N"}, {23, "P"}, {24, "R"},
- {25, "S"}, {26, "T"}, {27, "U"}, {28, "V"}, {29, "W"}, {30, "X"}, {31, "Y"}
- };
- private static readonly Dictionary<string, int> codeToYear;
- private static readonly Dictionary<string, int> codeToMonth;
- private static readonly Dictionary<string, int> codeToDay;
- static DateCodeConverter()
- {
- codeToYear = yearToCode
- .GroupBy(kv => kv.Value)
- .ToDictionary(g => g.Key, g => g.Last().Key);
- codeToMonth = monthToCode
- .ToDictionary(kv => kv.Value, kv => kv.Key);
- codeToDay = dayToCode
- .ToDictionary(kv => kv.Value, kv => kv.Key);
- }
- public static string GetYearCode(int year)
- {
- return yearToCode.TryGetValue(year, out string code) ? code : "未知年份";
- }
- public static int? GetYearByCode(string code)
- {
- return codeToYear.TryGetValue(code, out int year) ? year : (int?)null;
- }
- public static List<int> GetAllYearsByCode(string code)
- {
- return yearToCode
- .Where(kv => kv.Value == code)
- .Select(kv => kv.Key)
- .ToList();
- }
- public static string GetMonthCode(int month)
- {
- if (month < 1 || month > 12)
- return "无效月份";
- return monthToCode.TryGetValue(month, out string code) ? code : "未知月份";
- }
- public static int? GetMonthByCode(string code)
- {
- return codeToMonth.TryGetValue(code, out int month) ? month : (int?)null;
- }
- public static string GetDayCode(int day)
- {
- if (day < 1 || day > 31)
- return "无效日期";
- return dayToCode.TryGetValue(day, out string code) ? code : "未知日期";
- }
- public static int? GetDayByCode(string code)
- {
- return codeToDay.TryGetValue(code, out int day) ? day : (int?)null;
- }
- public static string ConvertToDateCode(DateTime date)
- {
- string yearCode = GetYearCode(date.Year);
- string monthCode = GetMonthCode(date.Month);
- string dayCode = GetDayCode(date.Day);
- if (yearCode == "未知年份" || monthCode == "无效月份" || dayCode == "无效日期" || dayCode == "未知日期")
- {
- return "无效日期";
- }
- return $"{yearCode}{monthCode}{dayCode}";
- }
- public static DateTime? ConvertFromDateCode(string dateCode)
- {
- if (string.IsNullOrEmpty(dateCode) || dateCode.Length != 3)
- return null;
- string yearCode = dateCode.Substring(0, 1);
- string monthCode = dateCode.Substring(1, 1);
- string dayCode = dateCode.Substring(2, 1);
- var year = GetYearByCode(yearCode);
- var month = GetMonthByCode(monthCode);
- var day = GetDayByCode(dayCode);
- if (!year.HasValue || !month.HasValue || !day.HasValue)
- return null;
- try
- {
- return new DateTime(year.Value, month.Value, day.Value);
- }
- catch (ArgumentOutOfRangeException)
- {
- return null;
- }
- }
- public static List<DateTime> ConvertAllFromDateCode(string dateCode)
- {
- var result = new List<DateTime>();
- if (string.IsNullOrEmpty(dateCode) || dateCode.Length != 3)
- return result;
- string yearCode = dateCode.Substring(0, 1);
- string monthCode = dateCode.Substring(1, 1);
- string dayCode = dateCode.Substring(2, 1);
- var allYears = GetAllYearsByCode(yearCode);
- var month = GetMonthByCode(monthCode);
- var day = GetDayByCode(dayCode);
- if (allYears.Count == 0 || !month.HasValue || !day.HasValue)
- return result;
- foreach (var year in allYears)
- {
- try
- {
- result.Add(new DateTime(year, month.Value, day.Value));
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- }
- return result;
- }
- }
- }
|