Cron utils for parsing, validations and human readable descriptions as well as date/time interoperability.

Overview

cron-utils

We define crons. And support them.

cron-utils is a Java library to define, parse, validate, migrate crons as well as get human readable descriptions for them. The project follows the Semantic Versioning Convention, provides OSGi metadata and uses Apache 2.0 license.

Gitter Chat Build Status Coverage Status

Codacy Badge Project stats by OpenHub

Download

cron-utils is available on Maven central repository.

<dependency>
    <groupId>com.cronutils</groupId>
    <artifactId>cron-utils</artifactId>
    <version>9.1.3</version>
</dependency>

For Android developers, cron-utils 7.0.0 assumes Android 26+. For earlier Android versions consider using cron-utils 6.0.6. If using ScheduleExpression from Java EE, this should be provided as a runtime dependency.

Current development

Now we are developing a new generation of cron-descriptors using neural-translation! Any kind of contributions are welcome: from help with dataset generation to machine learning models training and utilities to load them! If interested, please follow issue #3

Features

  • Create arbitrary cron expressions: you can define your own cron format! Supported fields are: second, minute, hour, day of month, month, day of week, year.
  • You can flag last field as optional!
  • Supports all cron special characters: * / , -
    • Non-standard characters L, W, LW, '?' and # are supported as well!
  • Print to locale specific human readable format (Chinese, English, German, Greek, Indonesian, Korean, Polish, Spanish, Swahili and Turkish are fully supported. Dutch, French, Italian, Portuguese and Russian have basic support).
  • Parse and Description process are decoupled: parse once and operate with the result!
  • Build cron expressions using CronBuilder:
    • no need to remember fields and constraints for each cron provider
    • crons become decoupled from cron provider: anytime you can export to another format.
  • Check if cron expressions are equivalent
  • Squash multiple cron expressions into a single one!
  • Validate if cron string expressions match a cron definition
  • Convert crons between different cron definitions: if you need to migrate expressions, CronMapper may help you!
  • Pre-defined definitions for the following cron libraries are provided:
  • Obtain last/next execution time as well as time from last execution/time to next execution.
  • Obtain weekdays count between two dates, considering different weekend policies as well as holidays.
  • Need to map constants between different cron/time libraries? Use ConstantsMapper.

Usage Examples

Below we present some examples. You can find this and others in a sample repo we created to showcase cron-utils libraries!

Build cron definitions

// Define your own cron: arbitrary fields are allowed and last field can be optional
CronDefinition cronDefinition =
    CronDefinitionBuilder.defineCron()
        .withSeconds().and()
        .withMinutes().and()
        .withHours().and()
        .withDayOfMonth()
            .supportsHash().supportsL().supportsW().and()
        .withMonth().and()
        .withDayOfWeek()
            .withIntMapping(7, 0) //we support non-standard non-zero-based numbers!
            .supportsHash().supportsL().supportsW().and()
        .withYear().optional().and()
        .instance();

// or get a predefined instance
cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);

Build a cron expression

// Create a cron expression. CronMigrator will ensure you remain cron provider agnostic
import static com.cronutils.model.field.expression.FieldExpressionFactory.*;

Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ))
    .withYear(always())
    .withDoM(between(SpecialChar.L, 3))
    .withMonth(always())
    .withDoW(questionMark())
    .withHour(always())
    .withMinute(always())
    .withSecond(on(0))
    .instance();
// Obtain the string expression
String cronAsString = cron.asString(); // 0 * * L-3 * ? *

Parse

// Create a parser based on provided definition
CronParser parser = new CronParser(cronDefinition);
Cron quartzCron = parser.parse("0 23 * ? * 1-5 *");

... even multi-cron expressions! How about squashing multiple crons into a single line? Instead of writing 0 0 9 * * ? *, 0 0 10 * * ? *, 0 30 11 * * ? * and 0 0 12 * * ? * we can wrap it into 0 0|0|30|0 9|10|11|12 * * ? *

Describe

// Create a descriptor for a specific Locale
CronDescriptor descriptor = CronDescriptor.instance(Locale.UK);

// Parse some expression and ask descriptor for description
String description = descriptor.describe(parser.parse("*/45 * * * * ?"));
// Description will be: "every 45 seconds"

description = descriptor.describe(quartzCron);
// Description will be: "every hour at minute 23 every day between Monday and Friday"
// which is the same description we get for the cron below:
descriptor.describe(parser.parse("0 23 * ? * MON-FRI *"));

Migrate

// Migration between cron libraries has never been so easy!
// Turn cron expressions into another format by using CronMapper:
CronMapper cronMapper = CronMapper.fromQuartzToCron4j();

Cron cron4jCron = cronMapper.map(quartzCron);
// and to get a String representation of it, we can use
cron4jCron.asString();//will return: 23 * * * 1-5

Validate

cron4jCron.validate()

Calculate time from/to execution

// Get date for last execution
ZonedDateTime now = ZonedDateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * ? *"));
ZonedDateTime lastExecution = executionTime.lastExecution(now);

// Get date for next execution
ZonedDateTime nextExecution = executionTime.nextExecution(now);

// Time from last execution
Duration timeFromLastExecution = executionTime.timeFromLastExecution(now);

// Time to next execution
Duration timeToNextExecution = executionTime.timeToNextExecution(now);

Map constants between libraries

// Map day of week value from Quartz to JodaTime
int jodatimeDayOfWeek =
        ConstantsMapper.weekDayMapping(
                ConstantsMapper.QUARTZ_WEEK_DAY,
                ConstantsMapper.JODATIME_WEEK_DAY
        );

Date and time formatting for humans!

Use htime - Human readable datetime formatting for Java! Despite this functionality is not bundled in the same jar, is a cron-utils project you may find useful.

// You no longer need to remember "YYYY-MM-dd KK a" patterns.
DateTimeFormatter formatter = 
	    HDateTimeFormatBuilder
		    .getInstance()
		    .forJodaTime()
		    .getFormatter(Locale.US)
		    .forPattern("June 9, 2011");
String formattedDateTime = formatter.print(lastExecution);
// formattedDateTime will be lastExecution in "dayOfWeek, Month day, Year" format

cron-utils CLI

We provide a simple CLI interface to use cron-utils right from console, without writing a new project! The CLI is a satellite project, available at cron-utils-cli

  • Usage: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'

  • Example: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f UNIX -e '* 1 * * *'

If you want a standalone jar without requiring the 'cp', build an uber jar with :

mvn assembly:assembly -DdescriptorId=jar-with-dependencies

Then, launch cli-utils (built in the target directory) with :

java -jar cron-utils-<version>-jar-with-dependencies.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'`

Contribute & Support!

Contributions are welcome! You can contribute by

  • starring and/or Flattring this repo!
  • requesting or adding new features. Check our roadmap!
  • enhancing existing code: ex.: provide more accurate description cases
  • testing
  • enhancing documentation
  • providing translations to support new locales
  • bringing suggestions and reporting bugs
  • spreading the word
  • telling us how you use it! We look forward to list you at our wiki!

Check our page! For stats about the project, you can visit our OpenHUB profile.

Support us donating once or by subscription through Flattr!

Flattr this!

Other cron-utils projects

You are welcome to visit and use the following cron-utils projects:

  • htime: A Java library to make it easy for humans format a date. You no longer need to remember date time formatting chars: just write an example, and you will get the appropriate formatter.
  • cron-utils-spring: A Java library to describe cron expressions in human readable language at Spring framework, using cron-utils.
  • cron-utils-cli: cron-utils features made available through a CLI.
  • cron-utils-sisyphus: A Scala scheduler that supports multiple cron notations.
  • cron-utils-scheduler: A Java job scheduler based on cron-utils library.
Comments
  • Multiple CRON expressions

    Multiple CRON expressions

    Team,

    Do you know if it's possible to use multiple CRON expressions in a single definition? CRON provides a lot of flexibility within each given time unit however it would be nice to combine them too

    Thanks

    done feature 
    opened by mattadamson 28
  • Backport to Java7/Android

    Backport to Java7/Android

    For an Android app, I had a need to parse a Cron expression and determine the previous/next execution date based on this expression. I came across this library but then realized it relies on JSR310 which was introduced in Java 8 and does not work with Android.

    I forked the library and was able to make it work on Android in 2 steps:

    Step 1: Make it work with Java 7

    1. Use threetenbp which is a backport of JSR310
    2. Search-and-replace all occurrences of java.time with org.threeten.bp
    3. Use retrolambda to be able to use java.util.function.Function and the lambdas in pre-Java 8

    With this, I was able to successfully run all cron-util tests with a target of Java 7

    Step 2: Make it work on Android

    Here I started off with some tests for my own use case (parse a Cron expression and get the next/previous execution times), but I made them Android tests (i.e., run on an emulator). For this. I had to make some more changes in my app/tests

    1. Add ThreeTenABP which is an Android extension to threetenbp.
    2. Initialize ThreeTenABP in my test like this. If you use it in an app, you will still have to init it in your Application sub-class.
    3. Add a dependency on an implementation of SL4J. I used this one but any which works for you will do.

    compile 'eu.lp0.slf4j:slf4j-android:1.7.22-0'

    With these changes, I was able to run my app-specific tests successfully on Android.

    Next steps

    I left it at that because I am not sure how the maintainers would like to proceed with this. There are open questions like

    • Do you want to support Android in the first place?
    • If so, would you like to use JSR310 for Java8 targets and use the backport for older targets? Basically generate multiple versions of the library from the same code-base with multiple targets
    • Would you rather do some runtime shenanigans to detect if JSR310 is on the classpath and use that and fall back to the backport otherwise (don't even know if this is possible!)
    • How would you like to approach the tests? For the Android target, It makes sense to run all the existing (408, at the time of this writing) tests on an emulator to make sure everything is compatible.
    enhancement done 
    opened by curioustechizen 27
  • Release Java 8 version using native Java 8 Time Library

    Release Java 8 version using native Java 8 Time Library

    Utilizing this in Java 8 requires either, that the project uses Guava and ThreeTenBP replacements in the entire code base, or significant boilerplate to map between Guava/ThreeTenBP and Java 8.

    Would a separate release branch for Java 8 be feasible?

    I could drive with the migration in that case.

    enhancement done 
    opened by SvenssonWeb 19
  • nextExecution not working for '0/30 * * * * *'

    nextExecution not working for '0/30 * * * * *'

    For the cron expression 0/30 * * * * *, with a custom definition of:

    // Unix Crontab with seconds allowed CronDefinition cronDefinition = CronDefinitionBuilder.defineCron() .withSeconds().and() .withMinutes().and() .withHours().and() .withDayOfMonth().and() .withMonth().and() .withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7, 0).and() .instance();

    Performing a nextExecution call when the input DateTime value is between 30 and 59 seconds of the minute causes the method to return with a DateTime at the previous minute instead of the next minute.

    For example:

    nextExecution('2015-08-28 12:05:44') -> 2015-08-28 12:05:00 nextExecution('2015-08-28 12:05:14') -> 2015-08-28 12:05:30

    Note that I've also tried this with '*/30 * * * * *' and got the same results.

    Unit tests:

    @Test
    public void testCronExpressionAfterHalf() {
    
        CronDefinition cronDefinition = CronDefinitionBuilder.defineCron()
                .withSeconds().and()
                .withMinutes().and()
                .withHours().and()
                .withDayOfMonth().and()
                .withMonth().and()
                .withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7, 0).and()
                .instance();
    
        CronParser parser = new CronParser(cronDefinition);
        Cron cron = parser.parse("*/30 * * * * *");
    
        MutableDateTime mutableDateTime = new MutableDateTime();
        mutableDateTime.setDateTime(2015, 8, 28, 12, 5, 44, 0);
    
        DateTime startDateTime = mutableDateTime.toDateTime();
    
        mutableDateTime = new MutableDateTime();
        mutableDateTime.setDateTime(2015, 8, 28, 12, 6, 0, 0);
    
        DateTime expectedDateTime = mutableDateTime.toDateTime();
    
        ExecutionTime executionTime = ExecutionTime.forCron(cron);
    
        DateTime nextExecutionDateTime = executionTime.nextExecution(startDateTime);
        MatcherAssert.assertThat(nextExecutionDateTime, Matchers.equalTo(expectedDateTime));
    }
    
    @Test
    public void testCronExpressionBeforeHalf() {
    
        CronDefinition cronDefinition = CronDefinitionBuilder.defineCron()
                .withSeconds().and()
                .withMinutes().and()
                .withHours().and()
                .withDayOfMonth().and()
                .withMonth().and()
                .withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7, 0).and()
                .instance();
    
        CronParser parser = new CronParser(cronDefinition);
        Cron cron = parser.parse("0/30 * * * * *");
    
        MutableDateTime mutableDateTime = new MutableDateTime();
        mutableDateTime.setDateTime(2015, 8, 28, 12, 5, 14, 0);
    
        DateTime startDateTime = mutableDateTime.toDateTime();
    
        mutableDateTime = new MutableDateTime();
        mutableDateTime.setDateTime(2015, 8, 28, 12, 5, 30, 0);
    
        DateTime expectedDateTime = mutableDateTime.toDateTime();
    
        ExecutionTime executionTime = ExecutionTime.forCron(cron);
    
        DateTime nextExecutionDateTime = executionTime.nextExecution(startDateTime);
        MatcherAssert.assertThat(nextExecutionDateTime, Matchers.equalTo(expectedDateTime));
    }
    
    bug done 
    opened by strmer15 19
  • Guava dependency is too restrictive

    Guava dependency is too restrictive

    The declared Guava dependency by the POM is too restrictive. The interval of compatible versions could be opened up to the current version, i.e. 23.4-jre.

    Now that the sepcific version is resolved by the org.apache.felix plugin to [18.0,19) and injected into the Jars MANIFEST file, cron-utils is sticked to Guava 18.X in an OSGi environment, although it could use any later release. At least up to 23.4-jre.

    Since I'm not sure how to declare the range in maven I'm not going to add a PR. However I guess changing the POMs Guava version from

    <guava.version>18.0</guava.version>

    to

    <guava.version>[18.0,)</guava.version>

    could do the job.

    enhancement done 
    opened by meincs 17
  • Last execution must truncate milliseconds

    Last execution must truncate milliseconds

    Hi! First of all, thanks for your great work! I need help for maybe an issue when getting last execution of a UNIX cron expression (SingleExecutionTime implementation).

    Look at this example: ExecutionTime.forCron(new CronParser(CronDefinitionBuilder.instanceDefinitionFor(UNIX)).parse("0 0 * * WED")).lastExecution(OffsetDateTime.of(2019, 6, 12, 0, 0, 0, 123, UTC).toZonedDateTime)

    I think there is an issue when dealing with milliseconds. I was expecting that, in the given example, the lastExecution date is "2019-06-12T00:00:00.000Z", but actually is "2019-06-05T00:00:00.000Z", a week before. If you notice, the given datetime to evaluate lastExecution is not exactly at 0 milliseconds, instead is a bit later :) (123 millis). So, I think that the correct result is the closest previous execution, at 0 milliseconds exactly.

    Look inside the code, maybe the problem is that potentialPreviousClosestMatch method is returning exactly the same inpute datetime when the former one matches the given cron expression. What do you think if, knowing that the calculation does not require to consider milliseconds, then the last line: return new ExecutionTimeResult(date, true) truncates milliseconds to 0.

    I think this is a more correctly answer when dealing with lastExecution (maybe the problem is also when fetching nextExecution).

    Regards, Patricio.

    bug done 
    opened by pgorin 16
  • ExecutionTime.forCron fails on pattern

    ExecutionTime.forCron fails on pattern "0 0/30 * * * ?"

    I use cronutils version 3.6.1. The Crontype.QUARTZ pattern "0 0/30 * * * ?" fails on

    CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor( CronType.QUARTZ );
    CronParser parser = new CronParser( cronDefinition );
    Cron cron = parser.parse( "0 0/30 * * * ?" );
    ExecutionTime time = ExecutionTime.forCron( cron );
    Duration timeToNextExecution = time.timeToNextExecution( DateTime.now() );
    

    with exception

    14:22:35,227 ERROR [STDERR] com.cronutils.model.time.generator.NoSuchValueException
    14:22:35,228 ERROR [STDERR]     at com.cronutils.model.time.generator.EveryFieldValueGenerator.generateNextValue(EveryFieldValueGenerator.java:43)
    14:22:35,228 ERROR [STDERR]     at com.cronutils.model.time.generator.EveryFieldValueGenerator.generateCandidatesNotIncludingIntervalExtremes(EveryFieldValueGenerator.java:67)
    14:22:35,229 ERROR [STDERR]     at com.cronutils.model.time.generator.FieldValueGenerator.generateCandidates(FieldValueGenerator.java:55)
    14:22:35,229 ERROR [STDERR]     at com.cronutils.model.time.ExecutionTimeBuilder.forMinutesMatching(ExecutionTimeBuilder.java:51)
    14:22:35,230 ERROR [STDERR]     at com.cronutils.model.time.ExecutionTime.forCron(ExecutionTime.java:92)
    14:22:35,230 ERROR [STDERR]     at de.psi.messaging.purge.MessagePurgeTrigger.getDelay(MessagePurgeTrigger.java:35)
    
    bug done 
    opened by rwiesemann 15
  • ExecutionTime.nextExecution() causes infinite loop for non-existent dates

    ExecutionTime.nextExecution() causes infinite loop for non-existent dates

    Reproduced by:

      @Test
      public void infiniteLoop() {
        Cron cron = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX))
          .parse("0 0 30 2 *");
        ExecutionTime.forCron(cron).nextExecution(ZonedDateTime.now());
      }
    
    bug duplicate done 
    opened by catharsis 12
  • Stacktrace printed

    Stacktrace printed

    I guess this should not happen?

    https://github.com/jmrozanec/cron-utils/blob/dfbf4127afd2c28b6e44a76e2379be59e6137556/src/main/java/com/cronutils/model/time/generator/EveryFieldValueGenerator.java#L70

    com.cronutils.model.time.generator.NoSuchValueException
        at com.cronutils.model.time.generator.EveryFieldValueGenerator.generateNextValue(EveryFieldValueGenerator.java:43)
        at com.cronutils.model.time.generator.EveryFieldValueGenerator.generateCandidatesNotIncludingIntervalExtremes(EveryFieldValueGenerator.java:67)
        at com.cronutils.model.time.generator.FieldValueGenerator.generateCandidates(FieldValueGenerator.java:55)
        at com.cronutils.model.time.ExecutionTimeBuilder.forMinutesMatching(ExecutionTimeBuilder.java:51)
        at com.cronutils.model.time.ExecutionTime.forCron(ExecutionTime.java:92)
    
    question done 
    opened by francisdb 12
  • Support Java 8 time

    Support Java 8 time

    Current implementation was developed using joda-time, since provides great date and time utils. A new date, time and calendar API was released at Java 8. Since we want to keep compatibility with previous JDK versions, we want to maintain a branch with joda-time dependency, and another to leverage the new Java 8 API.

    done feature 
    opened by jmrozanec 12
  • ExecutionTime.forCron prints to system out

    ExecutionTime.forCron prints to system out

    cron-utils 9.0.1

    reproducer (scala)

      val cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)
      val parser = new CronParser(cronDefinition)
      val cron = parser.parse("0 0 0 1 1 ? 2000")
      ExecutionTime.forCron(cron)
    

    output

    We for an class com.cronutils.model.time.generator.OnFieldValueGenerator builder
    
    bug done 
    opened by francisdb 11
  • DOM list including

    DOM list including "L" does not behave as expected

    A cron expression for every 15th and last day of the month at 12:00 does not behave as expected and skips the last days when asked for next execution time.

    Example cron schedule: 0 0 L,15 * *

    While the cron expression is "valid" I wonder if this is in fact not supported.

    bug help wanted hacktoberfest 
    opened by kristofarkas 6
  • asString() output for cron containing weekdays

    asString() output for cron containing weekdays

    Hi,

    First of all thanks very much for this library. Only recently discovered it but it is extremely useful for us while moving away from a certain scheduler and replacing it with another one.

    Our expressions typically contain written weekdays such as MON, TUE, etc. Parsing that up works great, but I can not find a way to get the output as such when building a CRON and getting the expression. (Cron#asString) It always seems to output integer values for the weekdays, which unfortunately, we can't deal with in our legacy solution.

    Any idea / hints on how to get named weekdays instead of integers?

    Thanks very much!

    help wanted feature hacktoberfest good first issue 
    opened by jmuis 4
  • Support for Intervals extension

    Support for Intervals extension

    Some cron parsers do support intervals like @every 1h30m10s

    For example: https://pkg.go.dev/github.com/robfig/cron#hdr-Intervals https://github.com/robfig/cron/blob/master/doc.go#L26

    Would be great to get them in cron-utils too

    help wanted feature hacktoberfest 
    opened by Spikhalskiy 1
  • Unix cron expression not taking seconds in consideration

    Unix cron expression not taking seconds in consideration

    Cron expressions like -> (*/2 * * * *) are supposed to run every two minutes from a scheduler that checks every 10 second if now is the execution time using

    ExecutionTime.isMatch(ZonedDateTime zd)

    Issue : In the 2nd , 4th , 6th ...... minute, the isMatch(date) method returns true for each of the 10th second in that particular minute. So cron expression runs 6 time instead of 1 time.

    So my query was, is it like that only ? or I am making any mistake ?

    Need help with this.

    Note : Also I tried to build the code from latest branch(9.1.5) as well from the master branch. It didn't build properly. Tests are failing.

    bug help wanted hacktoberfest 
    opened by tungnath 1
  • Test for cron expressions overlap

    Test for cron expressions overlap

    Given the following expressions:

    cron1 = "0 0 10 1/1 ? "; //everyday at 10am
    cron2 = "0 0 10 ? MON "; //every monday at 10am
    

    We would ideally want to test cron1.overlap(cron2) -> true

    help wanted feature hacktoberfest 
    opened by jmrozanec 4
Releases(9.2.0)
An extremely easy way to perform background processing in Java. Backed by persistent storage. Open and free for commercial use.

The ultimate library to perform background processing on the JVM. Dead simple API. Extensible. Reliable. Distributed and backed by persistent storage.

JobRunr 1.3k Jan 6, 2023
A simple Java Scheduler library with a minimal footprint and a straightforward API

Wisp Scheduler Wisp is a library for managing the execution of recurring Java jobs. It works like the Java class ScheduledThreadPoolExecutor, but it c

Coreoz 105 Dec 31, 2022
A small library for parsing ItemStacks from a human-readable format

easy-item A small library for parsing ItemStacks from a human-readable format (1.16.5+, Java 11) TODO: Maybe add serialization (item to human-readable

Maximilian Dorn 3 Dec 4, 2021
Calef - CalEF (Calendar Entry Formatter) : Select an entry in Android-Kalender and send/share the entry's content as human readable text.

CalEF (Calendar Entry Formatter) Select an entry in Android-Kalender and send/share the entry's content as human readable text. Usually calendar entri

k3b 6 Aug 17, 2022
Joda-Time is the widely used replacement for the Java date and time classes prior to Java SE 8.

Joda-Time Joda-Time provides a quality replacement for the Java date and time classes. The design allows for multiple calendar systems, while still pr

Joda.org 4.9k Dec 27, 2022
Apache Aurora - A Mesos framework for long-running services, cron jobs, and ad-hoc jobs

NOTE: The Apache Aurora project has been moved into the Apache Attic. A fork led by members of the former Project Management Committee (PMC) can be fo

The Apache Software Foundation 627 Nov 28, 2022
JED is mod that adds descriptions to every item in Minecraft with a simple UI

JED is mod that adds descriptions to every item in Minecraft with a simple UI

null 5 Mar 6, 2022
Meno Hochschild 382 Dec 25, 2022
Set of support modules for Java 8 datatypes (Optionals, date/time) and features (parameter names)

Overview This is a multi-module umbrella project for Jackson modules needed to support Java 8 features, especially with Jackson 2.x that only requires

FasterXML, LLC 372 Dec 23, 2022
Provides additional date-time classes that complement those in JDK 8

ThreeTen-Extra ThreeTen-Extra provides additional date-time classes that complement those in JDK 8. Not every piece of date/time logic is destined for

ThreeTen 361 Jan 8, 2023
Easily regenerate worlds at a specific time & date you want (SpigotMC plugin)

Restore/reset worlds at specific times without kicking players from the server! No need to go through the hassle of resetting your worlds manually anymore. Plenty of features are already included in the free version!

Kihsomray 11 Sep 23, 2022
Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more.

Crypto Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more. Getting Started TOTP ge

Oliver Yasuna 1 May 12, 2022
Terse. Elegant. Readable. Even faster.

Myxal Terse. Elegant. Readable. Even faster. A top secret experiment to make Jyxal even faster and multitarget compiled. How to run Download the lates

null 6 May 30, 2022
Java with functions is a small java tools and utils library.

Java with functions is a small java tools and utils library.

null 4 Oct 14, 2022
Android developers should collect the following utils

README of Chinese About AndroidUtilCode ?? is a powerful & easy to use library for Android. This library encapsulates the functions that commonly used

Blankj 31.7k Jan 3, 2023
Commons networking related utils.

commons-networking Commons networking related utils. Note: This is not an official Cisco product. Features SSE (Server-sent Events) client GNMI Utils

Cisco Systems Engineers 6 Dec 22, 2022
Diff Utils library is an OpenSource library for performing the comparison / diff operations between texts or some kind of data: computing diffs

Diff Utils library is an OpenSource library for performing the comparison / diff operations between texts or some kind of data: computing diffs, applying patches, generating unified diffs or parsing them, generating diff output for easy future displaying (like side-by-side view) and so on.

null 951 Jan 5, 2023
java common utils library

java-common-utils java common utils library 一个简单的Java通用工具类,目前的设想,包括简化异常处理工具、简易限流处理工具等 ExceptionHandler, 目标简化try catch的代码冗余度

xuangy 2 Jan 21, 2022
http://kodlama.io "Java & React Bootcamp" up to date Lectures and Homeworks.

Java & React Bootcamp (https://kodlama.io/) Lectures Lecture 1 intro Lecture 2 oopIntro homework Lecture 3 oopIntro2 inheritance inheritance2 homework

Karcan Ozbal 237 Dec 29, 2022