解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
3.89 KiB
X
# Cron ʹÓÃÊÖ²á `NewLife.Threading.Cron` ÊÇÒ»¸öÇáÁ¿¼¶ Cron ±í´ïʽ½âÎöÓëÆ¥ÅäÆ÷£¬ÓÃÓÚÔÚ¡°Ãë¼¶¡±ÅжÏij¸öʱ¼äÊÇ·ñÃüÖйæÔò£¬²¢¼ÆËãÏÂÒ»´Î/ÉÏÒ»´ÎÃüÖÐʱ¼ä¡£ - Ô´Â룺`NewLife.Core\Threading\Cron.cs` - ÃüÃû¿Õ¼ä£º`NewLife.Threading` --- ## 1. ÊÊÓó¡¾° - ÐèÒªÓÃ×Ö·û´®ÃèÊö¡°¹Ì¶¨Ê±¼äµã/ÖÜÆÚÐÔʱ¼äµã¡±´¥·¢¹æÔò - ÐèÒª¸ù¾Ýµ±Ç°Ê±¼ä¿ìËÙÅжÏÊÇ·ñÃüÖÐ - ÐèÒª¼ÆËãÏÂÒ»´Î´¥·¢µãÓÃÓÚµ÷¶È£¨µäÐÍ´îÅä `TimerX`£© > Éè¼ÆÈ¡É᣺ʵÏÖ¼òµ¥¡¢ÎÞÍⲿÒÀÀµ£»`GetNext/GetPrevious` ʹÓÃÖðÃë±éÀú£¨×î¶à 1 Ä꣩£¬Êʺϵ÷¶È²ãʹÓ㬲»½¨ÒéÔÚÈȵã·¾¶¸ßƵµ÷Óᣠ--- ## 2. ±í´ïʽ¸ñʽ ### 2.1 ×Ö¶Î ±í´ïʽÓɿոñ·Ö¸ô£¬×î¶àÖ§³Ö 6 ¶Î£¨²»×ãµÄ¶ÎĬÈÏ `*`£©£º ``` Ãë ·Ö Ê± ÈÕ Ô ÖÜ ``` ×ֶη¶Î§£¨ÓÉ `Parse` ÄÚ²¿²ÎÊý¾ö¶¨£©£º | ×Ö¶Î | ·¶Î§ | ˵Ã÷ | |---|---:|---| | Ãë | 0-59 | `TryParse(..., 0, 60)` | | ·Ö | 0-59 | `TryParse(..., 0, 60)` | | ʱ | 0-23 | `TryParse(..., 0, 24)` | | ÈÕ(ÿÔÂ) | 1-31 | `TryParse(..., 1, 32)` | | Ô | 1-12 | `TryParse(..., 1, 13)` | | ÖÜ | 0-6£¨²¢ÔÊÐí 7 µÄд·¨£© | `TryParseWeek(..., 0, 7)` | > ×¢£ºÀà×¢ÊÍÌáµ½¡°Äꡱ×ֶΣ¬µ«µ±Ç°ÊµÏÖδ½âÎöµÚ 7 ¶Î¡£ ### 2.2 Ö§³ÖµÄÓï·¨ ÿ¶Î×Ö¶ÎÖ§³Ö£º - `*`£ºÈÎÒâÖµ - `?`£º²»Ö¸¶¨Öµ£¨ÊµÏÖÉϵȼÛÓÚ `*` ´¦Àí£¬²¢²»»áÏñ Quartz ÄÇÑù¡°ºöÂÔ¸Ã×ֶΡ±£© - `a,b,c`£ºÃ¶¾Ù - `a-b`£º·¶Î§£¨°üº¬¶Ëµã£© - `*/n`¡¢`a/n`¡¢`a-b/n`£º²½½ø ÖÜ×ֶζîÍâÖ§³Ö£º - `d#k`£ºÃ¿ÔÂµÚ `k` ¸öÐÇÆÚ `d` - `d#Lk`£ºÃ¿Ôµ¹ÊýµÚ `k` ¸öÐÇÆÚ `d` > `#` Óï·¨ÔÚʵÏÖÖлὫ²½½øÉèΪ `7`£¬ÓÃÓÚÆ¥Å䡰ͬһÖܼ¸¡±µÄÐòºÅ¼ÆËã¡£ --- ## 3. ÐÇÆÚ£¨ÖÜ£©¹æÔòÓë `Sunday` Æ«ÒÆ ### 3.1 ĬÈϹæÔò `Cron` ĬÈϲÉÓà Linux/.NET ³£¼û¹æÔò£º - `0` ±íʾÖÜÈÕ - `1` ±íʾÖÜÒ» - ... - `6` ±íʾÖÜÁù ÔÚ `IsTime(DateTime time)` ÖУº ```csharp var w = (Int32)time.DayOfWeek + Sunday; ``` Òò´Ë£¬Êµ¼ÊÆ¥Åä¼ü»áÊÜ `Sunday` Ó°Ïì¡£ ### 3.2 `Sunday` Æ«ÒÆ `Sunday` ÓÃÓÚ¡°ÖÜÈÕ¶ÔÓ¦µÄÊý×Ö¡±Æ«ÒÆ£º - `Sunday = 0`£¨Ä¬ÈÏ£©£º`DayOfWeek.Sunday(0)` ¡ú 0 - `Sunday = 1`£º`DayOfWeek.Sunday(0)` ¡ú 1£¬`Monday(1)` ¡ú 2 ... ʹÓý¨Ò飺 - Èç¹ûÄãÏ£Íû±í´ïʽÀïÓà `1` ±íʾÖÜÈÕ£¬ÔòÉèÖà `cron.Sunday = 1` - `Parse` ²»»á×Ô¶¯ÍÆ¶Ï `Sunday` ·ç¸ñ£¬ÐèÒªÓɵ÷Ó÷½Í³Ò»Ô¼¶¨ --- ## 4. ºËÐÄ API ### 4.1 ¹¹ÔìÓë½âÎö ```csharp var cron = new Cron(); var ok = cron.Parse("0 */5 * * * *"); var cron2 = new Cron("0 */5 * * * *"); ``` - `Parse` ·µ»Ø `false` ±íʾ±í´ïʽ·Ç·¨ - ¹¹Ô캯Êý `Cron(String expression)` ÄÚ²¿Ö±½Óµ÷Óà `Parse(expression)` ### 4.2 ÅжÏʱ¼äÊÇ·ñÃüÖУº`IsTime` `IsTime` »áͬʱУÑ飺Ãë¡¢·Ö¡¢Ê±¡¢ÈÕ¡¢Ô¡¢ÖÜ¡£ ```csharp var cron = new Cron("0 0 2 * * 1-5"); var hit = cron.IsTime(DateTime.Parse("2026-01-09 02:00:00")); ``` ÖÜ×ֶΰüº¬ `#` ʱ£¬»¹»á½øÒ»²½Åжϡ°µÚ¼¸¸ö/µ¹ÊýµÚ¼¸¸öÖܼ¸¡±¡£ ### 4.3 ÏÂÒ»´ÎÃüÖÐʱ¼ä£º`GetNext` - ´Ó `time` µÄÏÂÒ»Ã뿪ʼ²éÕÒ£¨²»º¬ `time`£© - Èô `time` ´øºÁÃ룬»áÏÈ `Trim()` ¶ÔÆëµ½Ã룬ÔÙ×öÆ«ÒÆ£¨±ÜÃâ¡°¸ÕºÃ¶ÔÆë¡±Ôì³ÉÖØ¸´ÃüÖУ© - ×î¶à²éÕÒ 1 Ä꣬ʧ°Ü·µ»Ø `DateTime.MinValue` ```csharp var cron = new Cron("5/20 * * * * *"); var next = cron.GetNext(DateTime.Today); ``` ### 4.4 ÉÏÒ»´ÎÃüÖÐʱ¼ä£º`GetPrevious` - ´Ó `time` ǰһÃ뿪ʼ·´Ïò²éÕÒ£¨²»º¬ `time`£© - ×î¶à»ØËÝ 1 Ä꣬ʧ°Ü·µ»Ø `DateTime.MinValue` ```csharp var cron = new Cron("0 */10 * * * *"); var prev = cron.GetPrevious(DateTime.Now); ``` ### 4.5 ¶à±í´ïʽ£ºÈ¡×î½ü/×î½üÒ»´Î ```csharp var arr = new[] { "0 */2 * * * *", "30 */5 * * * *" }; var next = Cron.GetNext(arr, DateTime.Now); var prev = Cron.GetPrevious(arr, DateTime.Now); ``` --- ## 5. ʾÀý ### 5.1 Ãë¼¶²½½ø - `*/2`£ºÃ¿ 2 ÃëÒ»´Î - `5/20`£ºÃ¿·ÖÖ 5/25/45 Ãë ### 5.2 ¹¤×÷ÈÕÁ賿 2 µã ``` 0 0 2 * * 1-5 ``` ### 5.3 ÿÔÂµÚ 2 ¸öÐÇÆÚÈý ``` 0 0 0 ? ? 3#2 ``` > ¿É²Î¿¼²âÊÔ£º`XUnitTest.Core\Threading\CronTests.cs` ÖÐµÄ `dayweek_test`¡£ --- ## 6. ³£¼ûÎÊÌâ ### 6.1 `?` µÄÓïÒå ±¾ÊµÏÖÖÐ `?` µÄ´¦Àí¸ü½Ó½ü `*`£¬²¢²»»áÏñ Quartz Cron ÄÇÑù¡°ºöÂÔ¸Ã×ֶΡ±¡£ Òò´Ë£¬Èç¹ûÄã´Ó Quartz ±í´ïÊ½Ç¨ÒÆ£¬ÇëÓÅÏÈʹÓà `*`¡¢·¶Î§¡¢²½½ø¡¢Ã¶¾Ù¡¢`#` µÈÃ÷ȷʵÏÖµÄÓï·¨¡£ ### 6.2 `GetNext/GetPrevious` ÐÔÄÜ `GetNext/GetPrevious` ͨ¹ýÖðÃë±éÀú²éÕÒÃüÖе㣬±í´ïʽԽϡÊè¡¢¾àÀëÔ½Ô¶£¬±éÀúÔ½¾Ã¡£ ½¨Ò飺 - ²»ÒªÔÚ¸ßÆµÒµÎñÂß¼­Öз´¸´µ÷Óà - ½«¼ÆËã·Åµ½µ÷¶È²ã£¨ÀýÈ綨ʱÆ÷³õʼ»¯¡¢ÈÎÎñÖ´ÐÐÍêºó¼ÆËãÏÂÒ»´Î£© --- ## 7. Ïà¹ØÁ´½Ó - Îĵµ£º<https://newlifex.com/core/cron>