国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

你的程序支持復雜的時間調度嘛?

2019-11-17 02:14:39
字體:
來源:轉載
供稿:網友

你的程序支持復雜的時間調度嘛?

時隔兩個月了,這段時間,游戲籌備正式上線,根據游戲平臺數據反饋,反響還不錯。

但是牽涉出新問題,就是活動。活動功能本身很簡單。問題就在于,時間配置上,什么時間段開發活動。

配置多種多樣。比如,沒做星期2,4,6活動。每周的周六,周日,活動。指定月份和日期的活動。配置簡直是天花亂墜了。。。這尼瑪怎么搞????

那么有么有萬能的配置方式呢?首先,我能想到的配置肯定是字符串格式的。

必須包含,年月日星期時間,這尼瑪不就犯難了嘛????我們C#的 DateTime 類型格式化只支持年月日,時分秒啊。星期怎么控制???例如,我要每個星期的星期天搞一個活動,拉一拉充值消費我擦。。。

我自己都把自己繞暈了。。好吧。。。

后來想到一種方式,

[年][月][日][星期][時間]

[*][*][*][*][*]

這樣利于分割,配置,清晰。

然后就是驗證,時間在不在配置的時間開發內?

當然想到的*肯定是默認支持所有的

[2015][7][*][*][10:00-11:59]

這個格式,表示2015年的7月每一天的10點到12點為配置開啟時間

[2015][7-9][*][*][10:00-11:59]

這個格式,表示2015年的7月1日到9月30的每一天的10點到12點為配置開啟時間

[2015][7/9][*][*][10:00-11:59]

這個格式,表示2015年的7月或者9月的每一天的10點到12點為配置開啟時間

[2015][*][*][2/4/6][10:00-11:59]這個格式,表示2015年的每一個星期2,星期4,星期6的每一天的10點到12點為配置開啟時間

接下來,就是驗證這個時間格式。

 1         #region 驗證當前時間 年,月,日,星期,是否符合 static bool VerifyDate(int nowItem, string items) 2         /// <summary> 3         /// 驗證當前時間 年,月,日,星期,是否符合 4         /// </summary> 5         /// <param name="items">1-7;表示 1 到 7 , 1/7 表示 1 或者 7</param> 6         /// <returns></returns> 7         static bool VerifyDate(int nowItem, string items) 8         { 9             string nowItemStr = nowItem.ToString();10             if ("*".Equals(items) || nowItemStr.Equals(items)) { return true; }11             else if (items.IndexOf("-") > 0)12             {//區間劃分13                 string[] itemSplit = items.Split('-');14                 int item1 = 9999;15                 int.TryParse(itemSplit[0], out item1);16                 int item2 = 9999;17                 int.TryParse(itemSplit[1], out item2);18 19                 if (item1 <= nowItem && nowItem <= item2) { return true; }20             }21             else if (items.IndexOf("/") > 0)22             {//或劃分23                 string[] weeksSplit = items.Split('/');24                 foreach (var item in weeksSplit)25                 {26                     if (nowItemStr.Equals(item)) { return true; }27                 }28             }29             return false;30         }31         #endregion32 33         #region 驗證當期時間格式 static bool VerifyTime(DateTime date, string itemTime)34         /// <summary>35         /// 驗證當期時間格式36         /// </summary>37         /// <param name="date"></param>38         /// <param name="itemTime"></param>39         /// <returns></returns>40         static bool VerifyTime(DateTime date, string itemTime)41         {42             bool ret = false;43             if (!"*".Equals(itemTime))44             {45                 var items = Regex.Split(itemTime, @"/");46                 foreach (var item in items)47                 {48                     string[] itemTimes = item.Split('-');49                     var hhmm = Regex.Split(itemTimes[0], @":|:");50                     int hh = 24;51                     int.TryParse(hhmm[0], out hh);52                     int mm = 60;53                     int.TryParse(hhmm[1], out mm);54                     if (date.Hour > hh || (date.Hour == hh && date.Minute >= mm))55                     {56                         if (itemTimes.Length > 1)57                         {58                             var hhmm1 = Regex.Split(itemTimes[1], @":|:");59                             int hh1 = 24;60                             int.TryParse(hhmm1[0], out hh1);61                             int mm1 = 60;62                             int.TryParse(hhmm1[1], out mm1);63                             if (date.Hour < hh1 || (date.Hour == hh1 && date.Minute < mm1)) { ret = true; }64                             else { ret = false; }65                         }66                         else { ret = true; }67                     }68                     else { ret = false; }69                     if (ret)70                     {71                         break;72                     }73                 }74             }75             else { ret = true; }76             return ret;77         }78         #endregion

看看結果

這樣挺萬能的吧?

如果每一天有兩檔活動開放

[2015][7][*][*][10:00-11:59/14:00-16:59]

當我完成了這個需求的時候,,新的需求又來了,,,媽蛋,,,需要倒計時,,活動還有多長時間開始。。

臥槽。。

好吧,,有需求就是大爺。。只能苦逼的程序去搞定了,需求一句話,我卻花了一天時間啊。。。

我的思路是分解出,所包含的年月日,時間段開始。

 1         #region 獲取配置的年月日星期等信息 static List<int> GetConfigDate(DateTime date, int p1, string p3) 2         /// <summary> 3         /// 獲取配置的年月日星期等信息 4         /// </summary> 5         /// <param name="date"></param> 6         /// <param name="p1"></param> 7         /// <param name="p3"></param> 8         /// <returns></returns> 9         static List<int> GetConfigDate(DateTime date, int p1, string p3)10         {11             List<int> rets = new List<int>();12             string p1Str = p1.ToString();13             if ("*".Equals(p3) || p1Str.Equals(p3))14             {15                 rets.Add(p1);16                 rets.Add(p1 + 1);17             }18             else if (p3.IndexOf("-") > 0)19             {20                 string[] weekSplit = p3.Split('-');21                 int week1 = 9999;22                 int.TryParse(weekSplit[0], out week1);23 24                 int week2 = 9999;25                 int.TryParse(weekSplit[1], out week2);26                 for (int i = week1; i < week2 + 1; i++)27                 {28                     rets.Add(i);29                 }30             }31             else if (p3.IndexOf("/") > 0)32             {33                 string[] weeksSplit = p3.Split('/');34                 foreach (var item in weeksSplit)35                 {36                     int temp = 0;37                     if (int.TryParse(item, out temp))38                     {39                         rets.Add(temp);40                     }41                 }42             }43             else44             {45                 int temp = 0;46                 if (int.TryParse(p3, out temp))47                 {48                     rets.Add(temp);49                 }50             }51             return rets;52         }53         #endregion54 55         #region 獲取配置的時間字符串 static List<string> GetConfigTimeStr(string itemTime)56         /// <summary>57         /// 獲取配置的時間字符串 58         /// </summary>59         /// <param name="itemTime">必須類似的格式 單條 00:00-23:59  多條00:00-23:59/00:00-23:59</param>60         /// <returns></returns>61         static List<string> GetConfigTimeStr(string itemTime)62         {63             List<string> retObjs = new List<string>();64             // 00:00-23:5965             if (!"*".Equals(itemTime))66             {67                 var items = Regex.Split(itemTime, @"/");68                 foreach (var item in items)69                 {70                     string[] itemTimes = item.Split('-');71                     retObjs.Add(itemTimes[0]);72                 }73             }74             else75             {76                 retObjs.Add("00:00");77             }78             return retObjs;79         }80         #endregion

這里有一個蛋疼的問題,就是包含了星期,那么無疑與日期就要牽涉跨星期跨月,跨年了,

在這里特別鳴謝兄弟幫忙的分析。。

所以我分析出來,檢查包含的年月日來構造datetime 然后完成7天構造器。來分析時間段。

如果是本月那么就從當前的日期開始,如果不是本月那么就從1號開始,

 1         #region 處理星期包含的日期 日  static void ActionWeekDay(int weekmin, int weekmax, ref List<int> days, ref List<int> months, ref List<int> years) 2         /// <summary> 3         /// 處理星期包含的日期 日 4         /// </summary> 5         /// <param name="weekmin"></param> 6         /// <param name="weekmax"></param> 7         /// <param name="days"></param> 8         /// <param name="months"></param> 9
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻江县| 宜黄县| 昭平县| 阳西县| 会泽县| 怀宁县| 常熟市| 长岛县| 渝北区| 陕西省| 吴忠市| 平遥县| 阳江市| 天峨县| 察雅县| 崇信县| 唐山市| 林周县| 丹棱县| 拜城县| 六盘水市| 商河县| 正蓝旗| 宣恩县| 湛江市| 专栏| 桐城市| 安达市| 井陉县| 姚安县| 安乡县| 巴南区| 齐河县| 枝江市| 建宁县| 澎湖县| 西畴县| 陆良县| 会东县| 内乡县| 土默特右旗|