Sfoglia il codice sorgente

当前时间团组所在城市 --> 接入聚合API 世界时间接口,代码编写,测试; nodatime 计算城市当地时间代码编写,测试;及团组状态代码编写,测试;

LEIYI 4 mesi fa
parent
commit
316370f63e

+ 111 - 71
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc.ViewEngines;
 using Microsoft.EntityFrameworkCore.Metadata.Internal;
 using MySqlX.XDevAPI.Relational;
 using NetUV.Core.Handles;
+using NodaTime;
 using NPOI.POIFS.Properties;
 using NPOI.SS.Formula.Functions;
 using NPOI.SS.Formula.PTG;
@@ -6191,6 +6192,16 @@ WHERE
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> StatisticsNowCityOfGroup(StatisticsNowCityOfGroupDto dto)
         {
+
+            var dt1 = GetCountryOrCityCurrentDateTime("美国", "纽约");
+            var dt2 = GetCountryOrCityCurrentDateTime("日本", "东京");
+            var dt3 = GetCountryOrCityCurrentDateTime("加拿大", "多伦多");
+            var dt4 = GetCountryOrCityCurrentDateTime("韩国", "首尔");
+            var dt5 = GetCountryOrCityCurrentDateTime("美国", "华盛顿");
+            var dt6 = GetCountryOrCityCurrentDateTime("印度", "孟买");
+
+
+
             if (!SharingStaticData.PortTypes.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
 
             var nowLable = DateTime.Now.ToString("yyyy-MM-dd");
@@ -6211,7 +6222,9 @@ WHERE
             var countryDatas = await _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x => x.IsDel == 0 && !string.IsNullOrEmpty(x.Country) && !string.IsNullOrEmpty(x.City)).ToListAsync();
 
             //公务
-            var OADatas = await _sqlSugar.Queryable<Res_OfficialActivities>().Where(x => x.IsDel == 0 && groupIds.Contains(x.DiId) && !string.IsNullOrEmpty(x.Area)).ToListAsync();
+            var OADatas = await _sqlSugar
+                .Queryable<Res_OfficialActivities>().Where(x => x.IsDel == 0 && groupIds.Contains(x.DiId) && !string.IsNullOrEmpty(x.Country) && !string.IsNullOrEmpty(x.Area))
+                .ToListAsync();
 
             //酒店
             var hotelDatas = await _sqlSugar.Queryable<Grp_HotelReservations>()
@@ -6219,6 +6232,7 @@ WHERE
                 .Where((hr, ntf) => hr.IsDel == 0 && groupIds.Contains(hr.DiId))
                 .Select((hr, ntf) => new { 
                     hr.DiId,
+                    hr.AreaId,
                     hr.HotelName,
                     hr.CheckInDate,
                     hr.CheckOutDate,
@@ -6248,67 +6262,7 @@ WHERE
                 .Where(atr => atr.IsDel == 0 && groupIds.Contains(atr.DIId) && classTypes.Contains(atr.CType))
                 .ToListAsync();
 
-            //洲 当前时间data
-            var continents = new List<string>();
-            var groupCountrys = new List<string>();
             string[] characters = { "|", "、" };
-            foreach (var item in groupInfos)
-            {
-                var country = item.VisitCountry;
-                if (string.IsNullOrEmpty(country)) continue;
-
-                if (characters.Any(x => country.Contains(x)))
-                {
-                    var countryArray = country.Split(characters, StringSplitOptions.RemoveEmptyEntries);
-                    foreach (var country1 in countryArray)
-                    {
-                        groupCountrys.Add(country1);
-                        var continent = countryDatas.Find(x => x.Country.Equals(country1))?.Continent ?? countryDatas.Find(x => x.City.Equals(country1))?.Continent ?? "";
-                        if (!string.IsNullOrEmpty(continent)) continents.Add(continent);
-                    }
-                }
-                else
-                {
-                    groupCountrys.Add(country);
-                    var continent = countryDatas.Find(x => x.Country.Equals(country))?.Continent ?? countryDatas.Find(x => x.City.Equals(country))?.Continent ?? "";
-                    if (!string.IsNullOrEmpty(continent)) continents.Add(continent);
-                }
-            }
-
-            if (!continents.Any()) return Ok(JsonView(false, "未查询出国家所属洲!"));
-
-            continents = continents.Distinct().ToList();
-            var tzDatas = new List<TimezoneInfoView>();
-            var juHeApiMsg = "";
-            foreach (var continent in continents)
-            {
-                var tzResult = await _juHeApiService.GetContinentTimezoneAsync(continent);
-                if (tzResult.Error_code != 0)
-                {
-                    juHeApiMsg += string.Format("{0}\r", tzResult.Reason);
-                    continue;
-                }
-
-                if (tzResult.Result == null)
-                {
-                    juHeApiMsg += string.Format("聚合api响应数据为空\r");
-                    continue;
-                }
-
-                var info = JsonConvert.DeserializeObject<ContinentInfoView>(tzResult.Result.ToJson());
-                if (info == null && !info.tz.Any())
-                {
-                    juHeApiMsg += string.Format("聚合api响应数据为空\r");
-                    continue;
-                }
-
-                tzDatas.AddRange(info.tz);
-            }
-
-            if (!tzDatas.Any()) return Ok(JsonView(false, $"聚合API获取世界时间失败!! Message:{juHeApiMsg}"));
-
-            var groupCountrytz = tzDatas.Where(x => groupCountrys.Contains(x.tz_simple)).ToList();
-            
 
             var result = new List<StatisticsNowCityOfGroupResultView>();
 
@@ -6322,18 +6276,21 @@ WHERE
                 var currCountrys = item.VisitCountry.Split(characters, StringSplitOptions.RemoveEmptyEntries);
 
                 var stutus = true;
-                //公务
+
+                #region 公务
                 var currOADatas = OADatas.Where(x => x.DiId == item.Id && currCountrys.Any(c => x.Country.Contains(c))).ToList();
                 if (currOADatas.Any())
                 {
                     foreach (var curr_oa in currOADatas)
                     {
+                        var localTime = GetCountryOrCityCurrentDateTime(curr_oa.Country, curr_oa.Area);
+                        if (localTime == null) continue;
+
                         var currOaDtStart = Convert.ToDateTime($"{Convert.ToDateTime(curr_oa.Date).ToString("yyyy-MM-dd")} {curr_oa.Time}");
                         var currOaDtEnd = currOaDtStart.AddHours(2);
 
-                        var curr_tz1 = tzDatas.Where(x => curr_oa.Area.Contains(x.tz_simple)).ToList();
-                        var curr_tz2 = curr_tz1.Where(x => Convert.ToDateTime(x.time) >= currOaDtStart && Convert.ToDateTime(x.time) <= currOaDtEnd).FirstOrDefault();
-                        if (curr_tz2 == null) continue;
+                        var currTimeZoneStatus = localTime >= currOaDtStart && localTime <= currOaDtEnd;
+                        if (!currTimeZoneStatus) continue;
 
                         stutus = false;
                         statusText = "公务活动中";
@@ -6341,8 +6298,9 @@ WHERE
                         break;
                     }
                 }
+                #endregion
 
-                //酒店
+                #region 酒店
                 var currHotelDatas = hotelDatas.Where(x => x.DiId == item.Id && !string.IsNullOrEmpty(x.Country) && currCountrys.Any(c => x.Country.Contains(c))).ToList();
                 if (stutus && hotelDatas.Any())
                 {
@@ -6356,7 +6314,7 @@ WHERE
                                 month = checkInDt.Month,
                                 day = checkInDt.Day;
 
-                            timeRanges.Add((new DateTime(year, month, day, 0, 0, 0), new DateTime(year, month, day, 18, 0, 0)));
+                            timeRanges.Add((new DateTime(year, month, day, 0, 0, 0), new DateTime(year, month, day, 9, 0, 0)));
                             timeRanges.Add((new DateTime(year, month, day, 18, 0, 0), new DateTime(year, month, day, 23, 59, 59)));
 
                             checkInDt = checkInDt.AddDays(1);
@@ -6365,18 +6323,86 @@ WHERE
 
                         if (string.IsNullOrEmpty(curr_hotel.Country) && string.IsNullOrEmpty(curr_hotel.City)) continue;
 
-                        var curr_tz1 = tzDatas.Where(x => curr_hotel.Country.Contains(x.tz_simple) || curr_hotel.City.Contains(x.tz_simple)).ToList();
+                        var countryInfo = countryDatas.Where(x => x.Id == curr_hotel.AreaId).FirstOrDefault();
+                        if (countryInfo == null) continue;
 
+                        var localTime = GetCountryOrCityCurrentDateTime(countryInfo.Country, countryInfo.City);
 
-                        var curr_tz2 = curr_tz1.Where(x => timeRanges.Any(range => Convert.ToDateTime(x.time) >= range.start && Convert.ToDateTime(x.time) <= range.end)).FirstOrDefault();
-                        if (curr_tz2 == null) continue;
+                        var currTimeZoneStatus = timeRanges.Any(range => localTime >= range.start && localTime <= range.end);
+                        if (!currTimeZoneStatus) continue;
                         stutus = false;
                         statusText = "入住酒店中";
                         address = curr_hotel.HotelAddress;
                         break;
                     }
                 }
+                #endregion
+
+                #region 机票--通过三字码解析处理
+
+                var airTicketDatas = GetTableByBlackCode(item.Id);
+
+                if (stutus && airTicketDatas != null)
+                {
+
+                    foreach (DataRow curr_airTicket in airTicketDatas.Rows)
+                    {
+
+                        string departDate = curr_airTicket["Date"].ToString(),       //出发日期
+                               departThree = curr_airTicket["Three"].ToString(),     //城市三字码
+                               departTime = curr_airTicket["StartTime"].ToString(),  //出发时刻
+                               departTerminal = curr_airTicket["StartBuilding"].ToString(), //出发航站楼
+                               arriveTerminal = curr_airTicket["EndBuilding"].ToString(),   //抵达航站楼
+                               arrivedDate = curr_airTicket["ArrivedDate"].ToString(),   //抵达日期
+                               arrivedTime = curr_airTicket["EndTime"].ToString(),   //抵达日期
+                               flightTime = curr_airTicket["FlightTime"].ToString();        //飞行时间
+
+                        if (string.IsNullOrEmpty(departThree)) continue;
+
+                        string departAirThree = departThree.Substring(0, 3),
+                               arriveAirThree = departThree.Substring(3, 3);
+                        string departCountry = string.Empty,
+                               departCity = string.Empty,
+                               departAirport = string.Empty,
+                               arriveCountry = string.Empty,
+                               arriveCity = string.Empty,
+                               arriveAirport = string.Empty;
+
+                        var departCountryInfo = threeDatas.Find(x => x.Three.Equals(departAirThree));
+                        var arriveCountryInfo = threeDatas.Find(x => x.Three.Equals(arriveAirThree));
+                        if (departCountryInfo == null || arriveCountryInfo == null) continue;
+
+                        departCountry = departCountryInfo.Country;
+                        departCity = departCountryInfo.City;
+                        departAirport = departCountryInfo.AirPort;
+                        arriveCountry = arriveCountryInfo.Country;
+                        arriveCity = arriveCountryInfo.City;
+                        arriveAirport = arriveCountryInfo.AirPort;
+
+                        var arriveDateTimeBool = DateTime.TryParse(arrivedDate + " " + arrivedTime.Insert(2, ":"),out DateTime arriveDateTime);
+
+                        if (!arriveDateTimeBool) continue;
+
+                        var filghtHoursBool = int.TryParse(flightTime.Split("H")[0].ToString(), out int filghtHours);
+                        var filghtMinutesBool= int.TryParse(flightTime.Split("H")[1].Remove(2).ToString(), out int filghtMinutes);
+                        if (!filghtHoursBool || !filghtHoursBool) continue;
 
+                        var departDateTime = arriveDateTime.AddHours(-filghtHours).AddMinutes(-filghtMinutes);
+
+                        var localTime = GetCountryOrCityCurrentDateTime(arriveCountry,arriveCity);
+
+                        var currTimeZoneStatus = localTime >= departDateTime && localTime <= arriveDateTime;
+                        if (!currTimeZoneStatus) continue;
+                        stutus = false;
+                        statusText = $"正飞往{arriveCity}城市中";
+                        address = $"{arriveCountry}{arriveAirport}{arriveTerminal}";
+                        break;
+                    }
+                }
+
+                if (stutus) statusText = $"其他";
+
+                #endregion
                 result.Add(new StatisticsNowCityOfGroupResultView()
                 {
                     GroupName = item.TeamName,
@@ -6386,7 +6412,21 @@ WHERE
                 });
             }
 
-            return Ok(JsonView(result));
+            result.AddRange(new List<StatisticsNowCityOfGroupResultView>() {
+                new StatisticsNowCityOfGroupResultView(){ GroupName = "模拟数据团组1",Client = "模拟数据单位1",StatusText = "正在公务中",Address = "日本〒104-0032 Tokyo, Chuo City, Hatchobori, 1 Chome−12−8 EAST2階" },
+                new StatisticsNowCityOfGroupResultView(){ GroupName = "模拟数据团组2",Client = "模拟数据单位2",StatusText = "入住酒店中",Address = "日本〒104-0032 Tokyo, Chuo City, Hatchobori, 1 Chome−12−8 EAST2階" },
+                new StatisticsNowCityOfGroupResultView(){ GroupName = "模拟数据团组3",Client = "模拟数据单位3",StatusText = "其他",Address = "日本〒104-0032 Tokyo, Chuo City, Hatchobori, 1 Chome−12−8 EAST2階" },
+            });
+
+
+            var result1 = result.GroupBy(x => x.Address).Select(g => new
+            {
+                address = g.Key,
+                Items = g.ToList().Select(gg => new { gg.GroupName, gg.Client, gg.StatusText }).ToList()
+            });
+
+
+            return Ok(JsonView(result1));
         }
 
         private StatisticsNowCityOfGroupView CitySplit(string cityLable, List<Res_ThreeCode> cities)

+ 653 - 1
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -5,6 +5,8 @@ using Aspose.Words.Layout;
 using Aspose.Words.Saving;
 using Microsoft.AspNetCore.SignalR;
 using Microsoft.International.Converters.PinYinConverter;
+using NodaTime.TimeZones;
+using NodaTime;
 using OASystem.API.OAMethodLib.APNs;
 using OASystem.API.OAMethodLib.File;
 using OASystem.API.OAMethodLib.Hub.HubClients;
@@ -25,6 +27,7 @@ using OfficeOpenXml;
 using System.Data;
 using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
+using NodaTime.Extensions;
 
 namespace OASystem.API.OAMethodLib
 {
@@ -4440,10 +4443,659 @@ namespace OASystem.API.OAMethodLib
 
         #region iOS推送通知
 
-        
+
 
 
+        #endregion
+
+        #region 计算国家城市当时时间
+
+        /// <summary>
+        /// 中文城市名称映射
+        /// </summary>
+        private static readonly Dictionary<string, string> _timeZoneCityMappings = new Dictionary<string, string>
+        {
+{"Africa/Abidjan","非洲/阿比让"}                                         ,
+{"Africa/Accra","非洲/阿克拉"}                                           ,
+{"Africa/Addis_Ababa","非洲/亚的斯亚贝巴"}                               ,
+{"Africa/Algiers","非洲/阿尔及尔"}                                       ,
+{"Africa/Asmara","非洲/阿斯马拉"}                                        ,
+{"Africa/Asmera","非洲/阿斯梅拉"}                                        ,
+{"Africa/Bamako","非洲/巴马科"}                                          ,
+{"Africa/Bangui","非洲/班吉"}                                            ,
+{"Africa/Banjul","非洲/班珠尔"}                                          ,
+{"Africa/Bissau","非洲/比绍"}                                            ,
+{"Africa/Blantyre","非洲/布兰太尔"}                                      ,
+{"Africa/Brazzaville","非洲/布拉柴维尔"}                                 ,
+{"Africa/Bujumbura","非洲/布琼布拉"}                                     ,
+{"Africa/Cairo","非洲/开罗"}                                             ,
+{"Africa/Casablanca","非洲/卡萨布兰卡"}                                  ,
+{"Africa/Ceuta","非洲/休达"}                                             ,
+{"Africa/Conakry","非洲/科纳克里"}                                       ,
+{"Africa/Dakar","非洲/达喀尔"}                                           ,
+{"Africa/Dar_es_Salaam","非洲/达累斯萨拉姆"}                             ,
+{"Africa/Djibouti","非洲/吉布提"}                                        ,
+{"Africa/Douala","非洲/杜阿拉"}                                          ,
+{"Africa/El_Aaiun","非洲/阿尤恩"}                                        ,
+{"Africa/Freetown","非洲/弗里敦"}                                        ,
+{"Africa/Gaborone","非洲/哈博罗内"}                                      ,
+{"Africa/Harare","非洲/哈拉雷"}                                          ,
+{"Africa/Johannesburg","非洲/约翰内斯堡"}                                ,
+{"Africa/Juba","非洲/朱巴"}                                              ,
+{"Africa/Kampala","非洲/坎帕拉"}                                         ,
+{"Africa/Khartoum","非洲/喀土穆"}                                        ,
+{"Africa/Kigali","非洲/基加利"}                                          ,
+{"Africa/Kinshasa","非洲/金沙萨"}                                        ,
+{"Africa/Lagos","非洲/拉各斯"}                                           ,
+{"Africa/Libreville","非洲/利伯维尔"}                                    ,
+{"Africa/Lome","非洲/洛美"}                                              ,
+{"Africa/Luanda","非洲/罗安达"}                                          ,
+{"Africa/Lubumbashi","非洲/卢本巴希"}                                    ,
+{"Africa/Lusaka","非洲/卢萨卡"}                                          ,
+{"Africa/Malabo","非洲/马拉博"}                                          ,
+{"Africa/Maputo","非洲/马普托"}                                          ,
+{"Africa/Maseru","非洲/马塞卢"}                                          ,
+{"Africa/Mbabane","非洲/姆巴巴内"}                                       ,
+{"Africa/Mogadishu","非洲/摩加迪沙"}                                     ,
+{"Africa/Monrovia","非洲/蒙罗维亚"}                                      ,
+{"Africa/Nairobi","非洲/内罗毕"}                                         ,
+{"Africa/Ndjamena","非洲/恩贾梅纳"}                                      ,
+{"Africa/Niamey","非洲/尼亚美"}                                          ,
+{"Africa/Nouakchott","非洲/努瓦克肖特"}                                  ,
+{"Africa/Ouagadougou","非洲/瓦加杜古"}                                   ,
+{"Africa/Porto-Novo","非洲/波多诺伏"}                                    ,
+{"Africa/Sao_Tome","非洲/圣多美"}                                        ,
+{"Africa/Timbuktu","非洲/廷巴克图"}                                      ,
+{"Africa/Tripoli","非洲/的黎波里"}                                       ,
+{"Africa/Tunis","非洲/突尼斯"}                                           ,
+{"Africa/Windhoek","非洲/温得和克"}                                      ,
+{"America/Adak","美洲/埃达克"}                                           ,
+{"America/Anchorage","美洲/安克雷奇"}                                    ,
+{"America/Anguilla","美洲/安圭拉"}                                       ,
+{"America/Antigua","美洲/安提瓜岛"}                                      ,
+{"America/Araguaina","美洲/阿拉瓜纳"}                                    ,
+{"America/Argentina/Buenos_Aires","美洲/阿根廷/布宜诺斯艾利斯"}          ,
+{"America/Argentina/Catamarca","美洲/阿根廷/卡塔马卡"}                   ,
+{"America/Argentina/ComodRivadavia","美洲/阿根廷/科莫德里瓦达维亚"}      ,
+{"America/Argentina/Cordoba","美洲/阿根廷/科尔多瓦"}                     ,
+{"America/Argentina/Jujuy","美洲/阿根廷/胡胡伊省"}                       ,
+{"America/Argentina/La_Rioja","美洲/阿根廷/拉里奥哈"}                    ,
+{"America/Argentina/Mendoza","美洲/阿根廷/门多萨"}                       ,
+{"America/Argentina/Rio_Gallegos","美洲/阿根廷/里奥加耶戈斯"}            ,
+{"America/Argentina/Salta","美洲/阿根廷/萨尔塔"}                         ,
+{"America/Argentina/San_Juan","美洲/阿根廷/San_Juan"}                    ,
+{"America/Argentina/San_Luis","美洲/阿根廷/圣路易斯"}                    ,
+{"America/Argentina/Tucuman","美洲/阿根廷/图库曼"}                       ,
+{"America/Argentina/Ushuaia","美洲/阿根廷/乌斯怀亚"}                     ,
+{"America/Aruba","美洲/阿鲁巴岛"}                                        ,
+{"America/Asuncion","美洲/亚松森"}                                       ,
+{"America/Atikokan","美洲/阿蒂科坎"}                                     ,
+{"America/Atka","美洲/阿特卡"}                                           ,
+{"America/Bahia","美洲/巴伊亚"}                                          ,
+{"America/Bahia_Banderas","美洲/巴伊亚_班德拉斯"}                        ,
+{"America/Barbados","美洲/巴巴多斯"}                                     ,
+{"America/Belem","美洲/贝伦"}                                            ,
+{"America/Belize","美洲/伯利兹"}                                         ,
+{"America/Blanc-Sablon","America/Blanc-Sablon"}                          ,
+{"America/Boa_Vista","美洲/博阿维斯塔"}                                  ,
+{"America/Bogota","美洲/波哥大"}                                         ,
+{"America/Boise","美洲/博伊西"}                                          ,
+{"America/Buenos_Aires","美洲/布宜诺斯艾利斯"}                           ,
+{"America/Cambridge_Bay","美洲/剑桥湾"}                                  ,
+{"America/Campo_Grande","美洲/大坎普"}                                   ,
+{"America/Cancun","美洲/坎昆"}                                           ,
+{"America/Caracas","美洲/加拉加斯"}                                      ,
+{"America/Catamarca","美洲/卡塔马卡"}                                    ,
+{"America/Cayenne","美洲/卡宴"}                                          ,
+{"America/Cayman","美洲/开曼"}                                           ,
+{"America/Chicago","美洲/芝加哥"}                                        ,
+{"America/Chihuahua","美洲/奇瓦瓦州"}                                    ,
+{"America/Ciudad_Juarez","美洲/华雷斯城"}                                ,
+{"America/Coral_Harbour","美洲/珊瑚港"}                                  ,
+{"America/Cordoba","美洲/科尔多瓦"}                                      ,
+{"America/Costa_Rica","美洲/哥斯达黎加"}                                 ,
+{"America/Creston","美洲/克雷斯顿"}                                      ,
+{"America/Cuiaba","美洲/库艾巴"}                                         ,
+{"America/Curacao","美洲/库拉索岛"}                                      ,
+{"America/Danmarkshavn","美洲/丹麦港"}                                   ,
+{"America/Dawson","美洲/道森"}                                           ,
+{"America/Dawson_Creek","美洲/道森克里克"}                               ,
+{"America/Denver","美洲/丹佛"}                                           ,
+{"America/Detroit","美洲/底特律"}                                        ,
+{"America/Dominica","美洲/多米尼克"}                                     ,
+{"America/Edmonton","美洲/埃德蒙顿"}                                     ,
+{"America/Eirunepe","美洲/埃鲁内佩"}                                     ,
+{"America/El_Salvador","美洲/萨尔瓦多"}                                  ,
+{"America/Ensenada","美洲/恩塞纳达"}                                     ,
+{"America/Fort_Nelson","美洲/纳尔逊堡"}                                  ,
+{"America/Fort_Wayne","美洲/韦恩堡"}                                     ,
+{"America/Fortaleza","美洲/福塔莱萨"}                                    ,
+{"America/Glace_Bay","America/Glace_Bay"}                                ,
+{"America/Godthab","美洲/戈德哈布"}                                      ,
+{"America/Goose_Bay","America/Goose_Bay"}                                ,
+{"America/Grand_Turk","美洲/大特克岛"}                                   ,
+{"America/Grenada","美洲/格林纳达"}                                      ,
+{"America/Guadeloupe","美洲/瓜德罗普岛"}                                 ,
+{"America/Guatemala","美洲/危地马拉"}                                    ,
+{"America/Guayaquil","美洲/瓜亚基尔"}                                    ,
+{"America/Guyana","美洲/圭亚那"}                                         ,
+{"America/Halifax","美洲/哈利法克斯"}                                    ,
+{"America/Havana","美洲/哈瓦那"}                                         ,
+{"America/Hermosillo","美洲/埃莫西约"}                                   ,
+{"America/Indiana/Indianapolis","美洲/印第安纳州/印第安纳波利斯"}        ,
+{"America/Indiana/Knox","美洲/印第安纳州/诺克斯"}                        ,
+{"America/Indiana/Marengo","美洲/印第安纳州/马伦戈"}                     ,
+{"America/Indiana/Petersburg","美洲/印第安纳州/彼得斯堡"}                ,
+{"America/Indiana/Tell_City","美洲/印第安纳州/Tell_City"}                ,
+{"America/Indiana/Vevay","美洲/印第安纳州/沃韦"}                         ,
+{"America/Indiana/Vincennes","美洲/印第安纳州/文森斯"}                   ,
+{"America/Indiana/Winamac","美洲/印第安纳州/威纳马克"}                   ,
+{"America/Indianapolis","美洲/印第安纳波利斯"}                           ,
+{"America/Inuvik","美洲/伊努维克人"}                                     ,
+{"America/Iqaluit","美洲/伊魁特"}                                        ,
+{"America/Jamaica","美洲/牙买加"}                                        ,
+{"America/Jujuy","美洲/胡胡伊省"}                                        ,
+{"America/Juneau","美洲/朱诺"}                                           ,
+{"America/Kentucky/Louisville","美洲/肯塔基州/路易斯维尔"}               ,
+{"America/Kentucky/Monticello","美洲/肯塔基州/蒙蒂塞洛"}                 ,
+{"America/Knox_IN","美洲/Knox_IN"}                                       ,
+{"America/Kralendijk","美洲/克拉伦代克"}                                 ,
+{"America/La_Paz","美洲/拉巴斯"}                                         ,
+{"America/Lima","美洲/利马"}                                             ,
+{"America/Los_Angeles","美洲/洛杉矶"}                                    ,
+{"America/Louisville","美洲/路易斯维尔"}                                 ,
+{"America/Lower_Princes","美洲/下王子郡"}                                ,
+{"America/Maceio","美洲/马塞约"}                                         ,
+{"America/Managua","美洲/马那瓜"}                                        ,
+{"America/Manaus","美洲/马瑙斯"}                                         ,
+{"America/Marigot","美洲/马里戈特"}                                      ,
+{"America/Martinique","美洲/马提尼克岛"}                                 ,
+{"America/Matamoros","美洲/马塔莫罗斯"}                                  ,
+{"America/Mazatlan","美洲/马萨特兰"}                                     ,
+{"America/Mendoza","美洲/门多萨"}                                        ,
+{"America/Menominee","美国/梅诺米尼"}                                    ,
+{"America/Merida","美洲/梅里达"}                                         ,
+{"America/Metlakatla","美洲/梅特拉卡特拉"}                               ,
+{"America/Mexico_City","美洲/墨西哥_城市"}                               ,
+{"America/Miquelon","美洲/密克隆群岛"}                                   ,
+{"America/Moncton","美洲/蒙克顿"}                                        ,
+{"America/Monterrey","美洲/蒙特雷"}                                      ,
+{"America/Montevideo","美洲/蒙得维的亚"}                                 ,
+{"America/Montreal","美洲/蒙特利尔"}                                     ,
+{"America/Montserrat","美洲/蒙特塞拉特"}                                 ,
+{"America/Nassau","美洲/拿骚"}                                           ,
+{"America/New_York","美洲/纽约"}                                         ,
+{"America/Nipigon","美洲/尼皮贡"}                                        ,
+{"America/Nome","美国/名称"}                                             ,
+{"America/Noronha","美国/某地"}                                          ,
+{"America/North_Dakota/Beulah","美洲/北达科他州/比尤拉"}                 ,
+{"America/North_Dakota/Center","美洲/北达科他州/中部"}                   ,
+{"America/North_Dakota/New_Salem","美洲/北达科他州/新塞勒姆"}            ,
+{"America/Nuuk","美洲/努克"}                                             ,
+{"America/Ojinaga","美洲/奥吉纳加"}                                      ,
+{"America/Panama","美洲/巴拿马"}                                         ,
+{"America/Pangnirtung","美洲/庞纳通"}                                    ,
+{"America/Paramaribo","美洲/帕拉马里博"}                                 ,
+{"America/Phoenix","美洲/菲尼克斯"}                                      ,
+{"America/Port-au-Prince","美洲/太子港"}                                 ,
+{"America/Port_of_Spain","美洲/西班牙港"}                                ,
+{"America/Porto_Acre","美洲/阿卡港"}                                     ,
+{"America/Porto_Velho","美洲/旧波尔图"}                                  ,
+{"America/Puerto_Rico","美洲/波多黎各"}                                  ,
+{"America/Punta_Arenas","美洲/蓬塔阿雷纳斯"}                             ,
+{"America/Rainy_River","美洲/雷尼河"}                                    ,
+{"America/Rankin_Inlet","兰金因莱特"}                                    ,
+{"America/Recife","美洲/累西腓"}                                         ,
+{"America/Regina","美洲/里贾纳"}                                         ,
+{"America/Resolute","美国/坚决"}                                         ,
+{"America/Rio_Branco","美洲/里奥布兰科"}                                 ,
+{"America/Rosario","美洲/罗萨里奥"}                                      ,
+{"America/Santa_Isabel","美洲/圣伊莎贝尔"}                               ,
+{"America/Santarem","美洲/圣塔伦"}                                       ,
+{"America/Santiago","美洲/圣地亚哥"}                                     ,
+{"America/Santo_Domingo","美洲/圣多明各"}                                ,
+{"America/Sao_Paulo","美洲/圣保罗"}                                      ,
+{"America/Scoresbysund","美洲/斯科斯比松"}                               ,
+{"America/Shiprock","美洲/希普洛克"}                                     ,
+{"America/Sitka","美洲/锡特卡"}                                          ,
+{"America/St_Barthelemy","美洲/圣巴泰勒米"}                              ,
+{"America/St_Johns","美洲/圣约翰斯"}                                     ,
+{"America/St_Kitts","美洲/圣基茨"}                                       ,
+{"America/St_Lucia","美洲/圣卢西亚"}                                     ,
+{"America/St_Thomas","美洲/圣托马斯"}                                    ,
+{"America/St_Vincent","美洲/圣文森特"}                                   ,
+{"America/Swift_Current","America/Swift_Current"}                        ,
+{"America/Tegucigalpa","美洲/特古西加尔巴"}                              ,
+{"America/Thule","美洲/图勒"}                                            ,
+{"America/Thunder_Bay","美洲/雷湾"}                                      ,
+{"America/Tijuana","美洲/蒂华纳"}                                        ,
+{"America/Toronto","美洲/多伦多"}                                        ,
+{"America/Tortola","美洲/托尔托拉岛"}                                    ,
+{"America/Vancouver","美洲/温哥华"}                                      ,
+{"America/Virgin","美国/维珍"}                                           ,
+{"America/Whitehorse","美洲/怀特霍斯"}                                   ,
+{"America/Winnipeg","美洲/温尼伯"}                                       ,
+{"America/Yakutat","美洲/雅库塔特"}                                      ,
+{"America/Yellowknife","美洲/黄刀镇"}                                    ,
+{"Antarctica/Casey","南极洲/凯西"}                                       ,
+{"Antarctica/Davis","南极洲/戴维斯"}                                     ,
+{"Antarctica/DumontDUrville","南极洲/杜蒙杜维尔"}                        ,
+{"Antarctica/Macquarie","南极洲/麦格理"}                                 ,
+{"Antarctica/Mawson","南极洲/莫森"}                                      ,
+{"Antarctica/McMurdo","南极洲/麦克默多"}                                 ,
+{"Antarctica/Palmer","南极洲/帕尔默"}                                    ,
+{"Antarctica/Rothera","南极洲/罗塞拉岛"}                                 ,
+{"Antarctica/South_Pole","南极洲/南极点"}                                ,
+{"Antarctica/Syowa","南极洲/昭和"}                                       ,
+{"Antarctica/Troll","南极洲/巨魔"}                                       ,
+{"Antarctica/Vostok","南极洲/东方"}                                      ,
+{"Arctic/Longyearbyen","北极/朗伊尔城"}                                  ,
+{"Asia/Aden","亚洲/亚丁"}                                                ,
+{"Asia/Almaty","亚洲/阿拉木图"}                                          ,
+{"Asia/Amman","亚洲/安曼"}                                               ,
+{"Asia/Anadyr","亚洲/阿纳德尔"}                                          ,
+{"Asia/Aqtau","亚洲/阿克套"}                                             ,
+{"Asia/Aqtobe","亚洲/阿克托比"}                                          ,
+{"Asia/Ashgabat","亚洲/阿什哈巴德"}                                      ,
+{"Asia/Ashkhabad","亚洲/阿什哈巴德"}                                     ,
+{"Asia/Atyrau","亚洲/阿特劳"}                                            ,
+{"Asia/Baghdad","亚洲/巴格达"}                                           ,
+{"Asia/Bahrain","亚洲/巴林"}                                             ,
+{"Asia/Baku","亚洲/巴库"}                                                ,
+{"Asia/Bangkok","亚洲/曼谷"}                                             ,
+{"Asia/Barnaul","亚洲/巴尔瑙尔"}                                         ,
+{"Asia/Beirut","亚洲/贝鲁特"}                                            ,
+{"Asia/Bishkek","亚洲/比什凯克"}                                         ,
+{"Asia/Brunei","亚洲/文莱"}                                              ,
+{"Asia/Calcutta","亚洲/加尔各答"}                                        ,
+{"Asia/Chita","亚洲/赤塔"}                                               ,
+{"Asia/Choibalsan","亚洲/乔巴山"}                                        ,
+{"Asia/Chongqing","亚洲/重庆"}                                           ,
+{"Asia/Chungking","亚洲/重庆"}                                           ,
+{"Asia/Colombo","亚洲/科伦坡"}                                           ,
+{"Asia/Dacca","亚洲/达卡"}                                               ,
+{"Asia/Damascus","亚洲/大马士革"}                                        ,
+{"Asia/Dhaka","亚洲/达卡"}                                               ,
+{"Asia/Dili","亚洲/帝力"}                                                ,
+{"Asia/Dubai","亚洲/迪拜"}                                               ,
+{"Asia/Dushanbe","亚洲/杜尚别"}                                          ,
+{"Asia/Famagusta","亚洲/法马古斯塔"}                                     ,
+{"Asia/Gaza","亚洲/加沙"}                                                ,
+{"Asia/Harbin","亚洲/哈尔滨"}                                            ,
+{"Asia/Hebron","亚洲/希伯伦"}                                            ,
+{"Asia/Ho_Chi_Minh","亚洲/胡志明市"}                                     ,
+{"Asia/Hong_Kong","亚洲/香港"}                                           ,
+{"Asia/Hovd","亚洲/霍布德"}                                              ,
+{"Asia/Irkutsk","亚洲/伊尔库茨克"}                                       ,
+{"Asia/Istanbul","亚洲/伊斯坦布尔"}                                      ,
+{"Asia/Jakarta","亚洲/雅加达"}                                           ,
+{"Asia/Jayapura","亚洲/查亚普拉"}                                        ,
+{"Asia/Jerusalem","亚洲/耶路撒冷"}                                       ,
+{"Asia/Kabul","亚洲/喀布尔"}                                             ,
+{"Asia/Kamchatka","亚洲/堪察加半岛"}                                     ,
+{"Asia/Karachi","亚洲/卡拉奇"}                                           ,
+{"Asia/Kashgar","亚洲/喀什"}                                             ,
+{"Asia/Kathmandu","亚洲/加德满都"}                                       ,
+{"Asia/Katmandu","亚洲/加德满都"}                                        ,
+{"Asia/Khandyga","亚洲/坎迪加"}                                          ,
+{"Asia/Kolkata","亚洲/加尔各答"}                                         ,
+{"Asia/Krasnoyarsk","亚洲/克拉斯诺亚尔斯克"}                             ,
+{"Asia/Kuala_Lumpur","亚洲/吉隆坡_吉隆坡"}                               ,
+{"Asia/Kuching","亚洲/古晋"}                                             ,
+{"Asia/Kuwait","亚洲/科威特"}                                            ,
+{"Asia/Macao","亚洲/澳门"}                                               ,
+{"Asia/Macau","亚洲/澳门"}                                               ,
+{"Asia/Magadan","亚洲/马加丹"}                                           ,
+{"Asia/Makassar","亚洲/望加锡"}                                          ,
+{"Asia/Manila","亚洲/马尼拉"}                                            ,
+{"Asia/Muscat","亚洲/马斯喀特"}                                          ,
+{"Asia/Nicosia","亚洲/尼科西亚"}                                         ,
+{"Asia/Novokuznetsk","亚洲/新库兹涅茨克"}                                ,
+{"Asia/Novosibirsk","亚洲/新西伯利亚"}                                   ,
+{"Asia/Omsk","亚洲/鄂木斯克"}                                            ,
+{"Asia/Oral","亚洲/口头"}                                                ,
+{"Asia/Phnom_Penh","亚洲/金边"}                                          ,
+{"Asia/Pontianak","亚洲/笨珍"}                                           ,
+{"Asia/Pyongyang","亚洲/平壤"}                                           ,
+{"Asia/Qatar","亚洲/卡塔尔"}                                             ,
+{"Asia/Qostanay","亚洲/库斯塔奈"}                                        ,
+{"Asia/Qyzylorda","亚洲/克孜勒奥尔达"}                                   ,
+{"Asia/Rangoon","亚洲/仰光"}                                             ,
+{"Asia/Riyadh","亚洲/利雅得"}                                            ,
+{"Asia/Saigon","亚洲/西贡"}                                              ,
+{"Asia/Sakhalin","亚洲/萨哈林岛"}                                        ,
+{"Asia/Samarkand","亚洲/撒马尔罕"}                                       ,
+{"Asia/Seoul","亚洲/首尔"}                                               ,
+{"Asia/Shanghai","亚洲/上海"}                                            ,
+{"Asia/Singapore","亚洲/新加坡"}                                         ,
+{"Asia/Srednekolymsk","亚洲/中科雷姆斯克"}                               ,
+{"Asia/Taipei","亚洲/台北"}                                              ,
+{"Asia/Tashkent","亚洲/塔什干"}                                          ,
+{"Asia/Tbilisi","亚洲/第比利斯"}                                         ,
+{"Asia/Tehran","亚洲/德黑兰"}                                            ,
+{"Asia/Tel_Aviv","亚洲/特拉维夫"}                                        ,
+{"Asia/Thimbu","亚洲/廷布"}                                              ,
+{"Asia/Thimphu","亚洲/廷布"}                                             ,
+{"Asia/Tokyo","亚洲/东京"}                                               ,
+{"Asia/Tomsk","亚洲/托木斯克"}                                           ,
+{"Asia/Ujung_Pandang","亚洲/乌戎_潘当"}                                  ,
+{"Asia/Ulaanbaatar","亚洲/乌兰巴托"}                                     ,
+{"Asia/Ulan_Bator","亚洲/乌兰巴托"}                                      ,
+{"Asia/Urumqi","亚洲/乌鲁木齐"}                                          ,
+{"Asia/Ust-Nera","亚洲/乌斯季-内拉"}                                     ,
+{"Asia/Vientiane","亚洲/万象"}                                           ,
+{"Asia/Vladivostok","亚洲/符拉迪沃斯托克"}                               ,
+{"Asia/Yakutsk","亚洲/雅库茨克"}                                         ,
+{"Asia/Yangon","亚洲/仰光"}                                              ,
+{"Asia/Yekaterinburg","亚洲/叶卡捷琳堡"}                                 ,
+{"Asia/Yerevan","亚洲/埃里温"}                                           ,
+{"Atlantic/Azores","大西洋/亚速尔群岛"}                                  ,
+{"Atlantic/Bermuda","大西洋/百慕大"}                                     ,
+{"Atlantic/Canary","大西洋/加那利"}                                      ,
+{"Atlantic/Cape_Verde","大西洋/佛得角"}                                  ,
+{"Atlantic/Faeroe","大西洋/法罗"}                                        ,
+{"Atlantic/Faroe","大西洋/法罗"}                                         ,
+{"Atlantic/Jan_Mayen","大西洋/扬马延"}                                   ,
+{"Atlantic/Madeira","大西洋/马德拉"}                                     ,
+{"Atlantic/Reykjavik","大西洋/雷克雅未克"}                               ,
+{"Atlantic/South_Georgia","大西洋/南乔治亚州"}                           ,
+{"Atlantic/St_Helena","大西洋/圣赫勒拿岛"}                               ,
+{"Atlantic/Stanley","大西洋/斯坦利"}                                     ,
+{"Australia/ACT","澳大利亚/澳大利亚首都地区"}                            ,
+{"Australia/Adelaide","澳大利亚/阿德莱德"}                               ,
+{"Australia/Brisbane","澳大利亚/布里斯班"}                               ,
+{"Australia/Broken_Hill","澳大利亚/布罗肯希尔"}                          ,
+{"Australia/Canberra","澳大利亚/堪培拉"}                                 ,
+{"Australia/Currie","澳大利亚/柯里"}                                     ,
+{"Australia/Darwin","澳大利亚/达尔文"}                                   ,
+{"Australia/Eucla","澳大利亚/尤克拉拉"}                                  ,
+{"Australia/Hobart","澳大利亚/霍巴特"}                                   ,
+{"Australia/LHI","澳大利亚/LHI"}                                         ,
+{"Australia/Lindeman","澳大利亚/林德曼"}                                 ,
+{"Australia/Lord_Howe","澳大利亚/豪勋爵"}                                ,
+{"Australia/Melbourne","澳大利亚/墨尔本"}                                ,
+{"Australia/NSW","澳大利亚/新南威尔士州"}                                ,
+{"Australia/North","澳大利亚/北部"}                                      ,
+{"Australia/Perth","澳大利亚/珀斯"}                                      ,
+{"Australia/Queensland","澳大利亚/昆士兰"}                               ,
+{"Australia/South","澳大利亚/南部"}                                      ,
+{"Australia/Sydney","澳大利亚/悉尼"}                                     ,
+{"Australia/Tasmania","澳大利亚/塔斯马尼亚"}                             ,
+{"Australia/Victoria","澳大利亚/维多利亚"}                               ,
+{"Australia/West","澳大利亚/西部"}                                       ,
+{"Australia/Yancowinna","澳大利亚/扬科温纳"}                             ,
+{"Brazil/Acre","巴西/阿卡"}                                              ,
+{"Brazil/DeNoronha","巴西/迪诺罗尼亚群岛"}                               ,
+{"Brazil/East","巴西/东部"}                                              ,
+{"Brazil/West","巴西/西部"}                                              ,
+{"CET","CET"}                                                            ,
+{"CST6CDT","CST6CDT"}                                                    ,
+{"Canada/Atlantic","加拿大/大西洋"}                                      ,
+{"Canada/Central","加拿大/中部"}                                         ,
+{"Canada/Eastern","加拿大/东部"}                                         ,
+{"Canada/Mountain","加拿大/山区"}                                        ,
+{"Canada/Newfoundland","加拿大/纽芬兰"}                                  ,
+{"Canada/Pacific","加拿大/太平洋地区"}                                   ,
+{"Canada/Saskatchewan","加拿大/萨斯喀彻温省"}                            ,
+{"Canada/Yukon","加拿大/育空地区"}                                       ,
+{"Chile/Continental","智利/大陆航空"}                                    ,
+{"Chile/EasterIsland","智利/复活节岛"}                                   ,
+{"Cuba","古巴"}                                                          ,
+{"EET","欧洲东部时间"}                                                   ,
+{"EST","东部时间"}                                                       ,
+{"EST5EDT","EST5EDT"}                                                    ,
+{"Egypt","埃及"}                                                         ,
+{"Eire","爱尔兰"}                                                        ,
+{"Etc/GMT","Etc/GMT"}                                                    ,
+{"Etc/GMT+0","Etc/GMT+0"}                                                ,
+{"Etc/GMT+1","Etc/GMT+1"}                                                ,
+{"Etc/GMT+10","Etc/GMT+10"}                                              ,
+{"Etc/GMT+11","Etc/GMT+11"}                                              ,
+{"Etc/GMT+12","Etc/GMT+12"}                                              ,
+{"Etc/GMT+2","Etc/GMT+2"}                                                ,
+{"Etc/GMT+3","Etc/GMT+3"}                                                ,
+{"Etc/GMT+4","Etc/GMT+4"}                                                ,
+{"Etc/GMT+5","Etc/GMT+5"}                                                ,
+{"Etc/GMT+6","Etc/GMT+6"}                                                ,
+{"Etc/GMT+7","Etc/GMT+7"}                                                ,
+{"Etc/GMT+8","Etc/GMT+8"}                                                ,
+{"Etc/GMT+9","Etc/GMT+9"}                                                ,
+{"Etc/GMT-0","Etc/GMT-0"}                                                ,
+{"Etc/GMT-1","Etc/GMT-1"}                                                ,
+{"Etc/GMT-10","Etc/GMT-10"}                                              ,
+{"Etc/GMT-11","Etc/GMT-11"}                                              ,
+{"Etc/GMT-12","Etc/GMT-12"}                                              ,
+{"Etc/GMT-13","Etc/GMT-13"}                                              ,
+{"Etc/GMT-14","Etc/GMT-14"}                                              ,
+{"Etc/GMT-2","Etc/GMT-2"}                                                ,
+{"Etc/GMT-3","Etc/GMT-3"}                                                ,
+{"Etc/GMT-4","Etc/GMT-4"}                                                ,
+{"Etc/GMT-5","Etc/GMT-5"}                                                ,
+{"Etc/GMT-6","Etc/GMT-6"}                                                ,
+{"Etc/GMT-7","Etc/GMT-7"}                                                ,
+{"Etc/GMT-8","Etc/GMT-8"}                                                ,
+{"Etc/GMT-9","Etc/GMT-9"}                                                ,
+{"Etc/GMT0","Etc/GMT0"}                                                  ,
+{"Etc/Greenwich","Etc/格林威治"}                                         ,
+{"Etc/UCT","Etc/UCT"}                                                    ,
+{"Etc/UTC","Etc/UTC"}                                                    ,
+{"Etc/Universal","Etc/通用"}                                             ,
+{"Etc/Zulu","Etc/祖鲁语"}                                                ,
+{"Europe/Amsterdam","欧洲/阿姆斯特丹"}                                   ,
+{"Europe/Andorra","欧洲/安道尔"}                                         ,
+{"Europe/Astrakhan","欧洲/阿斯特拉罕"}                                   ,
+{"Europe/Athens","欧洲/雅典"}                                            ,
+{"Europe/Belfast","欧洲/贝尔法斯特"}                                     ,
+{"Europe/Belgrade","欧洲/贝尔格莱德"}                                    ,
+{"Europe/Berlin","欧洲/柏林"}                                            ,
+{"Europe/Bratislava","欧洲/布拉迪斯拉发"}                                ,
+{"Europe/Brussels","欧洲/布鲁塞尔"}                                      ,
+{"Europe/Bucharest","欧洲/布加勒斯特"}                                   ,
+{"Europe/Budapest","欧洲/布达佩斯"}                                      ,
+{"Europe/Busingen","欧洲/布辛根"}                                        ,
+{"Europe/Chisinau","欧洲/基希讷乌"}                                      ,
+{"Europe/Copenhagen","欧洲/哥本哈根"}                                    ,
+{"Europe/Dublin","欧洲/都柏林"}                                          ,
+{"Europe/Gibraltar","欧洲/直布罗陀"}                                     ,
+{"Europe/Guernsey","欧洲/根西岛"}                                        ,
+{"Europe/Helsinki","欧洲/赫尔辛基"}                                      ,
+{"Europe/Isle_of_Man","欧洲/马恩岛"}                                     ,
+{"Europe/Istanbul","欧洲/伊斯坦布尔"}                                    ,
+{"Europe/Jersey","欧洲/泽西岛"}                                          ,
+{"Europe/Kaliningrad","欧洲/加里宁格勒"}                                 ,
+{"Europe/Kiev","欧洲/基辅"}                                              ,
+{"Europe/Kirov","欧洲/基洛夫"}                                           ,
+{"Europe/Kyiv","欧洲/基辅"}                                              ,
+{"Europe/Lisbon","欧洲/里斯本"}                                          ,
+{"Europe/Ljubljana","欧洲/卢布尔雅那"}                                   ,
+{"Europe/London","欧洲/伦敦"}                                            ,
+{"Europe/Luxembourg","欧洲/卢森堡"}                                      ,
+{"Europe/Madrid","欧洲/马德里"}                                          ,
+{"Europe/Malta","欧洲/马耳他"}                                           ,
+{"Europe/Mariehamn","欧洲/玛丽港"}                                       ,
+{"Europe/Minsk","欧洲/明斯克"}                                           ,
+{"Europe/Monaco","欧洲/摩纳哥"}                                          ,
+{"Europe/Moscow","欧洲/莫斯科"}                                          ,
+{"Europe/Nicosia","欧洲/尼科西亚"}                                       ,
+{"Europe/Oslo","欧洲/奥斯陆"}                                            ,
+{"Europe/Paris","欧洲/巴黎"}                                             ,
+{"Europe/Podgorica","欧洲/波德戈里察"}                                   ,
+{"Europe/Prague","欧洲/布拉格"}                                          ,
+{"Europe/Riga","欧洲/里加"}                                              ,
+{"Europe/Rome","欧洲/罗马"}                                              ,
+{"Europe/Samara","欧洲/萨马拉"}                                          ,
+{"Europe/San_Marino","欧洲/圣马力诺"}                                    ,
+{"Europe/Sarajevo","欧洲/萨拉热窝"}                                      ,
+{"Europe/Saratov","欧洲/萨拉托夫"}                                       ,
+{"Europe/Simferopol","欧洲/辛菲罗波尔"}                                  ,
+{"Europe/Skopje","欧洲/斯科普里"}                                        ,
+{"Europe/Sofia","欧洲/索非亚"}                                           ,
+{"Europe/Stockholm","欧洲/斯德哥尔摩"}                                   ,
+{"Europe/Tallinn","欧洲/塔林"}                                           ,
+{"Europe/Tirane","欧洲/地拉那"}                                          ,
+{"Europe/Tiraspol","欧洲/蒂拉斯波尔"}                                    ,
+{"Europe/Ulyanovsk","欧洲/乌里扬诺夫斯克"}                               ,
+{"Europe/Uzhgorod","欧洲/乌日哥罗德"}                                    ,
+{"Europe/Vaduz","欧洲/瓦杜兹"}                                           ,
+{"Europe/Vatican","欧洲/梵蒂冈"}                                         ,
+{"Europe/Vienna","欧洲/维也纳"}                                          ,
+{"Europe/Vilnius","欧洲/维尔纽斯"}                                       ,
+{"Europe/Volgograd","欧洲/伏尔加格勒"}                                   ,
+{"Europe/Warsaw","欧洲/华沙"}                                            ,
+{"Europe/Zagreb","欧洲/萨格勒布"}                                        ,
+{"Europe/Zaporozhye","欧洲/扎波罗热"}                                    ,
+{"Europe/Zurich","欧洲/苏黎世"}                                          ,
+{"GB","国标"}                                                            ,
+{"GB-Eire","英国-爱尔兰"}                                                ,
+{"GMT","格林威治标准时间"}                                               ,
+{"GMT+0","格林威治标准时间+0"}                                           ,
+{"GMT-0","GMT-0"}                                                        ,
+{"GMT0","格林威治标准时间0"}                                             ,
+{"Greenwich","格林威治"}                                                 ,
+{"HST","高温试验"}                                                       ,
+{"Hongkong","香港"}                                                      ,
+{"Iceland","冰岛"}                                                       ,
+{"Indian/Antananarivo","印度/塔那那利佛"}                                ,
+{"Indian/Chagos","印第安人/查戈斯人"}                                    ,
+{"Indian/Christmas","印度/圣诞节"}                                       ,
+{"Indian/Cocos","印度/科科斯"}                                           ,
+{"Indian/Comoro","印度/科摩罗"}                                          ,
+{"Indian/Kerguelen","印度/凯尔盖朗"}                                     ,
+{"Indian/Mahe","印度/马埃岛"}                                            ,
+{"Indian/Maldives","印度/马尔代夫"}                                      ,
+{"Indian/Mauritius","印度/毛里求斯"}                                     ,
+{"Indian/Mayotte","印度/马约特岛"}                                       ,
+{"Indian/Reunion","印度/留尼汪岛"}                                       ,
+{"Iran","伊朗"}                                                          ,
+{"Israel","以色列"}                                                      ,
+{"Jamaica","牙买加"}                                                     ,
+{"Japan","日本"}                                                         ,
+{"Kwajalein","夸贾林环礁"}                                               ,
+{"Libya","利比亚"}                                                       ,
+{"MET","梅特"}                                                           ,
+{"MST","MST"}                                                            ,
+{"MST7MDT","MST7MDT"}                                                    ,
+{"Mexico/BajaNorte","墨西哥/北下巴"}                                     ,
+{"Mexico/BajaSur","墨西哥/巴哈苏尔"}                                     ,
+{"Mexico/General","墨西哥/一般"}                                         ,
+{"NZ","新西兰"}                                                          ,
+{"NZ-CHAT","新西兰聊天室"}                                               ,
+{"Navajo","纳瓦霍语"}                                                    ,
+{"PRC","中国"}                                                           ,
+{"PST8PDT","PST8PDT"}                                                    ,
+{"Pacific/Apia","太平洋/阿皮亚"}                                         ,
+{"Pacific/Auckland","太平洋/奥克兰"}                                     ,
+{"Pacific/Bougainville","太平洋/布干维尔岛"}                             ,
+{"Pacific/Chatham","太平洋/查塔姆"}                                      ,
+{"Pacific/Chuuk","太平洋/楚克"}                                          ,
+{"Pacific/Easter","太平洋/复活节"}                                       ,
+{"Pacific/Efate","太平洋/埃法特"}                                        ,
+{"Pacific/Enderbury","太平洋/恩德伯里"}                                  ,
+{"Pacific/Fakaofo","太平洋/法考福"}                                      ,
+{"Pacific/Fiji","太平洋/斐济"}                                           ,
+{"Pacific/Funafuti","太平洋/富纳富提"}                                   ,
+{"Pacific/Galapagos","太平洋/加拉帕戈斯群岛"}                            ,
+{"Pacific/Gambier","太平洋/甘比尔"}                                      ,
+{"Pacific/Guadalcanal","太平洋/瓜达尔卡纳尔岛"}                          ,
+{"Pacific/Guam","太平洋/关岛"}                                           ,
+{"Pacific/Honolulu","太平洋/檀香山"}                                     ,
+{"Pacific/Johnston","太平洋/约翰斯顿"}                                   ,
+{"Pacific/Kanton","太平洋/关东"}                                         ,
+{"Pacific/Kiritimati","太平洋/基里蒂马蒂"}                               ,
+{"Pacific/Kosrae","太平洋/科斯雷"}                                       ,
+{"Pacific/Kwajalein","太平洋/夸贾林环礁"}                                ,
+{"Pacific/Majuro","太平洋/马朱罗"}                                       ,
+{"Pacific/Marquesas","太平洋/马克萨斯"}                                  ,
+{"Pacific/Midway","太平洋/中途岛"}                                       ,
+{"Pacific/Nauru","太平洋/瑙鲁"}                                          ,
+{"Pacific/Niue","太平洋/纽埃"}                                           ,
+{"Pacific/Norfolk","太平洋/诺福克"}                                      ,
+{"Pacific/Noumea","太平洋/努美阿"}                                       ,
+{"Pacific/Pago_Pago","太平洋/帕果"}                                      ,
+{"Pacific/Palau","太平洋/帕劳"}                                          ,
+{"Pacific/Pitcairn","太平洋/皮特凯恩"}                                   ,
+{"Pacific/Pohnpei","太平洋/波纳佩"}                                      ,
+{"Pacific/Ponape","太平洋/波纳佩"}                                       ,
+{"Pacific/Port_Moresby","太平洋/莫尔兹比港"}                             ,
+{"Pacific/Rarotonga","太平洋/拉罗汤加"}                                  ,
+{"Pacific/Saipan","太平洋/塞班岛"}                                       ,
+{"Pacific/Samoa","太平洋/萨摩亚"}                                        ,
+{"Pacific/Tahiti","太平洋/大溪地"}                                       ,
+{"Pacific/Tarawa","太平洋/塔拉瓦"}                                       ,
+{"Pacific/Tongatapu","太平洋/汤加塔布岛"}                                ,
+{"Pacific/Truk","太平洋/特鲁克"}                                         ,
+{"Pacific/Wake","太平洋/威克"}                                           ,
+{"Pacific/Wallis","太平洋/沃利斯"}                                       ,
+{"Pacific/Yap","太平洋/雅浦岛"}                                          ,
+{"Poland","波兰"}                                                        ,
+{"Portugal","葡萄牙"}                                                    ,
+{"ROC","ROC"}                                                            ,
+{"ROK","韩国"}                                                           ,
+{"Singapore","新加坡"}                                                   ,
+{"Turkey","Turkey"}                                                      ,
+{"UCT","世界标准时间"}                                                   ,
+{"US/Alaska","美国/阿拉斯加"}                                            ,
+{"US/Aleutian","美国/阿留申群岛"}                                        ,
+{"US/Arizona","美国/亚利桑那州"}                                         ,
+{"US/Central","美国/中部"}                                               ,
+{"US/East-Indiana","美国/东印第安纳州"}                                  ,
+{"US/Eastern","美国/东部"}                                               ,
+{"US/Hawaii","美国/夏威夷"}                                              ,
+{"US/Indiana-Starke","美国/印第安纳州斯塔克"}                            ,
+{"US/Michigan","美国/密歇根州"}                                          ,
+{"US/Mountain","美国/山地"}                                              ,
+{"US/Pacific","美国/太平洋地区"}                                         ,
+{"US/Samoa","美国/萨摩亚"}                                               ,
+{"UTC","世界标准时间"}                                                   ,
+{"Universal","Universal"}                                                ,
+{"W-SU","W-SU"}                                                          ,
+{"WET","WET"}                                                            ,
+{"Zulu","Zulu"}
+    };
+
+        /// <summary>
+        /// 获取国家或城市当地时间
+        /// </summary>
+        /// <param name="country"></param>
+        /// <param name="city"></param>
+        /// <returns></returns>
+        public static DateTime? GetCountryOrCityCurrentDateTime(string country, string city)
+        {
+            DateTime? currDt = null;
+
+            var currTimezones = _timeZoneCityMappings.Where(x => x.Value.Contains(city)).ToList();
+            if (!currTimezones.Any()) {
+
+                currTimezones = _timeZoneCityMappings.Where(x => x.Value.Contains(country)).ToList();
+
+
+            };
+            string timeZoneId = string.Empty;
+            if (currTimezones.Count > 1)
+            {
+                currTimezones = currTimezones.Where(x => x.Value.Contains(country)).ToList();
+                timeZoneId = currTimezones.FirstOrDefault().Key ?? string.Empty;
+            }else timeZoneId = currTimezones.FirstOrDefault().Key ?? string.Empty;
+
+            if (string.IsNullOrEmpty(timeZoneId)) return currDt;
+
+            // Step 1: 获取当前 UTC 时间
+            Instant now = SystemClock.Instance.GetCurrentInstant();
+
+            // Step 2: 加载目标时区(以 "Asia/Shanghai" 为例)
+            var timeZone = DateTimeZoneProviders.Tzdb[timeZoneId];
+
+            if (timeZone == null) return currDt;
+
+            // Step 3: 将 UTC 时间转换为目标时区的本地时间
+            currDt = now.InZone(timeZone).ToDateTimeUnspecified();
+
+            return currDt;
+        }
+
         #endregion
 
     }
 }
+
+

+ 1 - 0
OASystem/OASystem.Api/OASystem.API.csproj

@@ -37,6 +37,7 @@
     <PackageReference Include="EPPlus" Version="7.4.1" />
     <PackageReference Include="Flurl.Http" Version="3.2.4" />
     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.11" />
+    <PackageReference Include="NodaTime" Version="3.2.0" />
     <PackageReference Include="NPOI" Version="2.7.1" />
     <PackageReference Include="PinYinConverterCore" Version="1.0.2" />
     <PackageReference Include="QRCoder" Version="1.4.1" />

+ 2 - 0
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -578,4 +578,6 @@ public static class CommonFun
         return (startDate, endDate);
     }
 
+
+   
 }