# strftime-ruby [![GitHub Actions](https://github.com/artichoke/strftime-ruby/workflows/CI/badge.svg)](https://github.com/artichoke/strftime-ruby/actions) [![Code Coverage](https://codecov.artichokeruby.org/strftime-ruby/badges/flat.svg?nocache=2)](https://codecov.artichokeruby.org/strftime-ruby/index.html) [![Discord](https://img.shields.io/discord/607683947496734760)](https://discord.gg/QCe2tp2) [![Twitter](https://img.shields.io/twitter/follow/artichokeruby?label=Follow&style=social)](https://twitter.com/artichokeruby)
[![Crate](https://img.shields.io/crates/v/strftime-ruby.svg)](https://crates.io/crates/strftime-ruby) [![API](https://docs.rs/strftime-ruby/badge.svg)](https://docs.rs/strftime-ruby) [![API trunk](https://img.shields.io/badge/docs-trunk-blue.svg)](https://artichoke.github.io/strftime-ruby/strftime/) `strftime-ruby` is a Ruby 3.1.2 compatible implementation of the [`Time#strftime`] method. The `strftime` routines provided by this crate are [POSIX-compatible], except for intentionally ignoring the `E` and `O` modified conversion specifiers. [`time#strftime`]: https://ruby-doc.org/core-3.1.2/Time.html#method-i-strftime [posix-compatible]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html > Formats time according to the directives in the given format string. > > The directives begin with a percent (%) character. Any text not listed as a > directive will be passed through to the output string. > > The directive consists of a percent (%) character, zero or more flags, > optional minimum field width, optional modifier and a conversion specifier as > follows: > > ```text > % > ``` ## Usage Add this to your `Cargo.toml`: ```toml [dependencies] strftime-ruby = "1.0.1" ``` ## Crate features All features are enabled by default. - **std** - Enables a dependency on the Rust Standard Library. Activating this feature enables implementations of [`std::error::Error`] on the error types in this crate and the `strftime::io` module, which depends on [`std::io::Write`]. Activating this feature also activates the **alloc** feature. - **alloc** - Enables a dependency on the Rust [`alloc`] crate. Activating this feature enables the `strftime::bytes` and `stftime::string` modules, which depend on [`alloc::vec::Vec`] and [`alloc::string::String`]. When the **alloc** feature is enabled, this crate only uses [fallible allocation APIs]. [`std::error::error`]: https://doc.rust-lang.org/std/error/trait.Error.html [`std::io::write`]: https://doc.rust-lang.org/std/io/trait.Write.html [`alloc`]: https://doc.rust-lang.org/alloc/ [`alloc::vec::vec`]: https://doc.rust-lang.org/alloc/vec/struct.Vec.html [`alloc::string::string`]: https://doc.rust-lang.org/alloc/string/struct.String.html [fallible allocation apis]: https://doc.rust-lang.org/alloc/vec/struct.Vec.html#method.try_reserve ### Minimum Supported Rust Version This crate requires at least Rust 1.58.0. This version can be bumped in minor releases. ## License `strftime-ruby` is licensed under the [MIT License](LICENSE) (c) Ryan Lopopolo and x-hgg-x. This repository includes a vendored copy of [`strftime.c`] from Ruby 3.1.2, which is licensed under the [Ruby license] or [BSD 2-clause license]. See [`vendor/README.md`] for more details. These sources are not distributed on [crates.io]. [`strftime.c`]: vendor/ruby-3.1.2/strftime.c [ruby license]: vendor/ruby-3.1.2/COPYING [bsd 2-clause license]: vendor/ruby-3.1.2/BSDL [`vendor/readme.md`]: vendor/README.md [crates.io]: https://crates.io/