TimeByExample
Provides a Crystal implementation of Go-style time formatting by example.
Installation
-
Add the dependency to your
shard.yml:dependencies: time_by_example: github: mamantoha/time_by_example -
Run
shards install
Usage
require "time_by_example"
This shard adds a by_example method to Time.
The argument to this method is the formatted version of a reference date.
For example:
time = Time.local(2022, 12, 20, 17, 15, 30, location: Time::Location.load("Asia/Taipei"))
time.by_example("Jan 02 2006 @ 03:04 pm") => "Dec 20 2022 @ 05:15 pm"
time.by_example("Jan 02 2006 @ 15:04") => "Dec 20 2022 @ 17:15"
time.by_example("Mon 02 Jan 15:04") => "Tue 20 Dec 17:15"
time.by_example("01/02/06") => "12/20/22"
time.by_example("02.01.2006") => "20.12.2022"
time.by_example("15:04 MST") => "17:15 Asia/Taipei"
The reference time is Jan 2, 2006 at 3:04:05 PM MST, which can be remembered as 1 2 3 4 5 6 -7.
Supported formats
| Period | Constants |
| ------------------- | ------------------------------------------------------------------------------- |
| Year | 2006 and 06 |
| Month | January, JANUARY, Jan, JAN, 1, 01, and _1 for space padding |
| Day of the week | Mon, MON, Monday, MONDAY |
| Day of month | 2, 02, and _2 for space padding |
| Day of year | 002 |
| Hour | 15, 3, 03, pm, PM, am, AM |
| Minute | 04, but not 4 |
| Second | 05, 05.000 for milliseconds and 05.000000 and 05.000000000, but not 5 |
| Time Zone | -7000, -07:00, -07:00:00, MST |
Alternate usage
If you want to reuse a format multiple times, you can do so by creating and reusing an TimeByExample::ExampleFormat
ef = TimeByExample::ExampleFormat.new("03:04 pm")
ef.format(Time.local(2022, 12, 20, 17, 15, 30)) # => "05:15 pm"
ef.format(Time.local(2022, 12, 20, 5, 15, 30)) # => "05:15 am"
Contributing
- Fork it (https://github.com/mamantoha/time_by_example/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Contributors
- Anton Maminov - creator and maintainer