mirror of https://github.com/arendst/Tasmota.git
98 lines
3.7 KiB
Markdown
98 lines
3.7 KiB
Markdown
Cron expression parsing in ANSI C
|
|
=================================
|
|
|
|
[![travis](https://travis-ci.org/staticlibs/ccronexpr.svg?branch=master)](https://travis-ci.org/staticlibs/ccronexpr)
|
|
[![appveyor](https://ci.appveyor.com/api/projects/status/github/staticlibs/ccronexpr?svg=true)](https://ci.appveyor.com/project/staticlibs/ccronexpr)
|
|
|
|
Given a cron expression and a date, you can get the next date which satisfies the cron expression.
|
|
|
|
Supports cron expressions with `seconds` field. Based on implementation of [CronSequenceGenerator](https://github.com/spring-projects/spring-framework/blob/babbf6e8710ab937cd05ece20270f51490299270/spring-context/src/main/java/org/springframework/scheduling/support/CronSequenceGenerator.java) from Spring Framework.
|
|
|
|
Compiles and should work on Linux (GCC/Clang), Mac OS (Clang), Windows (MSVC), Android NDK, iOS and possibly on other platforms with `time.h` support.
|
|
|
|
Supports compilation in C (89) and in C++ modes.
|
|
|
|
Usage example
|
|
-------------
|
|
|
|
#include "ccronexpr.h"
|
|
|
|
cron_expr expr;
|
|
const char* err = NULL;
|
|
memset(&expr, 0, sizeof(expr));
|
|
cron_parse_expr("0 */2 1-4 * * *", &expr, &err);
|
|
if (err) ... /* invalid expression */
|
|
time_t cur = time(NULL);
|
|
time_t next = cron_next(&expr, cur);
|
|
|
|
|
|
Compilation and tests run examples
|
|
----------------------------------
|
|
|
|
gcc ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c89 -DCRON_TEST_MALLOC -o a.out && ./a.out
|
|
g++ ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c++11 -DCRON_TEST_MALLOC -o a.out && ./a.out
|
|
g++ ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c++11 -DCRON_TEST_MALLOC -DCRON_COMPILE_AS_CXX -o a.out && ./a.out
|
|
|
|
clang ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c89 -DCRON_TEST_MALLOC -o a.out && ./a.out
|
|
clang++ ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c++11 -DCRON_TEST_MALLOC -o a.out && ./a.out
|
|
clang++ ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c++11 -DCRON_TEST_MALLOC -DCRON_COMPILE_AS_CXX -o a.out && ./a.out
|
|
|
|
cl ccronexpr.c ccronexpr_test.c /W4 /D_CRT_SECURE_NO_WARNINGS && ccronexpr.exe
|
|
|
|
Examples of supported expressions
|
|
---------------------------------
|
|
|
|
Expression, input date, next date:
|
|
|
|
"*/15 * 1-4 * * *", "2012-07-01_09:53:50", "2012-07-02_01:00:00"
|
|
"0 */2 1-4 * * *", "2012-07-01_09:00:00", "2012-07-02_01:00:00"
|
|
"0 0 7 ? * MON-FRI", "2009-09-26_00:42:55", "2009-09-28_07:00:00"
|
|
"0 30 23 30 1/3 ?", "2011-04-30_23:30:00", "2011-07-30_23:30:00"
|
|
|
|
See more examples in [tests](https://github.com/staticlibs/ccronexpr/blob/a1343bc5a546b13430bd4ac72f3b047ac08f8192/ccronexpr_test.c#L251).
|
|
|
|
Timezones
|
|
---------
|
|
|
|
This implementation does not support explicit timezones handling. By default all dates are
|
|
processed as UTC (GMT) dates without timezone infomation.
|
|
|
|
To use local dates (current system timezone) instead of GMT compile with `-DCRON_USE_LOCAL_TIME`, example:
|
|
|
|
gcc -DCRON_USE_LOCAL_TIME ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c89 -DCRON_TEST_MALLOC -o a.out && TZ="America/Toronto" ./a.out
|
|
|
|
License information
|
|
-------------------
|
|
|
|
This project is released under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0).
|
|
|
|
Changelog
|
|
---------
|
|
|
|
**2019-03-27**
|
|
|
|
* `CRON_USE_LOCAL_TIME` usage fixes
|
|
|
|
**2018-05-23**
|
|
|
|
* merged [#8](https://github.com/staticlibs/ccronexpr/pull/8)
|
|
* merged [#9](https://github.com/staticlibs/ccronexpr/pull/9)
|
|
* minor cleanups
|
|
|
|
**2018-01-27**
|
|
|
|
* merged [#6](https://github.com/staticlibs/ccronexpr/pull/6)
|
|
* updated license file (to the one parse-able by github)
|
|
|
|
**2017-09-24**
|
|
|
|
* merged [#4](https://github.com/staticlibs/ccronexpr/pull/4)
|
|
|
|
**2016-06-17**
|
|
|
|
* use thread-safe versions of `gmtime` and `localtime`
|
|
|
|
**2015-02-28**
|
|
|
|
* initial public version
|