Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/floraison/et-orbi
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
https://github.com/floraison/et-orbi
ruby time timezone
Last synced: 7 days ago
JSON representation
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
- Host: GitHub
- URL: https://github.com/floraison/et-orbi
- Owner: floraison
- License: mit
- Created: 2017-03-18T07:21:55.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-17T08:24:57.000Z (3 months ago)
- Last Synced: 2024-10-29T12:58:33.860Z (22 days ago)
- Topics: ruby, time, timezone
- Language: Ruby
- Size: 418 KB
- Stars: 24
- Watchers: 5
- Forks: 11
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# et-orbi
[![tests](https://github.com/floraison/et-orbi/workflows/test/badge.svg)](https://github.com/floraison/et-orbi/actions)
[![Gem Version](https://badge.fury.io/rb/et-orbi.svg)](http://badge.fury.io/rb/et-orbi)Time zones for [fugit](https://github.com/floraison/fugit) and for [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler). Urbi et Orbi.
`EtOrbi::EoTime` instances quack like Ruby `Time` instances, but their `#zone` returns a `TZInfo::TimeZone` instance.
Getting `EoTime` instances:
```ruby
require 'et-orbi'EtOrbi.now
# => #
EtOrbi.now('Asia/Singapore')
# => #...>
EtOrbi.parse('2017-12-13 13:00:00 America/Jamaica')
# => #...>
EtOrbi.make_time(Time.now)
# => #EtOrbi.make_time(2017, 1, 31, 12, 'Europe/Moscow').to_debug_s
# => 'ot 2017-01-31 12:00:00 +03:00 dst:false'EtOrbi::EoTime.new(0, 'UTC').to_s
# => "1970-01-01 00:00:00 +0000"
EtOrbi::EoTime.new(0, 'Europe/Moscow').to_s
# => "1970-01-01 03:00:00 +0300"
EtOrbi::EoTime.new(0, 'Europe/Moscow').to_zs
# => "1970-01-01 03:00:00 Europe/Moscow" # "be precise in your speech"EtOrbi.parse('1970-01-01 03:00:00 Europe/Moscow')
# => #, @time=nil>
```More about `EtOrbi::EoTime` instances:
```ruby
eot = EtOrbi::EoTime.new(0, 'Europe/Moscow')eot.to_local_time.class # => Time
eot.to_local_time.to_s # => "1970-01-01 09:00:00 +0900" (at least on my system)# For the rest, EtOrbi::EoTime mimics ::Time
```Helper methods:
```ruby
require 'et-orbi'EtOrbi.get_tzone('Europe/Vilnius')
# => #
EtOrbi.local_tzone
# => #EtOrbi.platform_info
# => "(etz:nil,tnz:\"JST\",tzid:nil,rv:\"2.2.6\",rp:\"x86_64-darwin14\",eov:\"1.0.1\",
# rorv:nil,astz:nil,debian:nil,centos:nil,osx:\"Asia/Tokyo\")"
#
# etz: ENV['TZ']
# tnz: Time.now.zone
# tzid: defined?(TZInfo::Data)
# rv: RUBY_VERSION
# rp: RUBY_PLATFORM
# eov: EtOrbi::VERSION
# rorv: Rails::VERSION::STRING
# astz: ActiveSupport provided Time.zone
```### Chronic integration
By default, et-orbi relies on [Chronic](https://github.com/mojombo/chronic) to parse strings like "tomorrow" or "friday 1pm", if `Chronic` is present.
```ruby
EtOrbi.parse('tomorrow')
# => #,
# @time=nil>
EtOrbi.parse('tomorrow').to_s
# => "2019-12-07 12:00:00 +0900"
```This is a poor design choice I replicated from [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler).
Of course this leads to [issues](https://gitlab.com/gitlab-org/gitlab/issues/37014).
It's probably better to have Chronic do its work outside of et-orbi, like in:
```ruby
EtOrbi.parse(Chronic.parse('tomorrow').to_s).to_s
# => "2019-12-07 12:00:00 +0900"
```If one has Chronic present in their project but doesn't want it to interfere with et-orbi, it can be disabled at `parse` call:
```ruby
EtOrbi.parse('tomorrow')
# => #,
# @time=nil>
EtOrbi.parse('tomorrow', enable_chronic: false)
# ArgumentError: No time information in "tomorrow"
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
```
or at the et-orbi level:
```ruby
irb(main):007:0> EtOrbi.chronic_enabled = false
# => false
irb(main):008:0> EtOrbi.chronic_enabled?
# => false
EtOrbi.parse('tomorrow')
# ArgumentError: No time information in "tomorrow"
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
```### Rails?
If Rails is present, `Time.zone` is provided and EtOrbi will use it, unless `ENV['TZ']` is set to a valid timezone name. Setting `ENV['TZ']` to nil can give back precedence to `Time.zone`.
Rails sets its timezone under `config/application.rb`.
## Related projects
### Sister projects
* [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler) - a cron/at/in/every/interval in-process scheduler, in fact, it's the father project to this fugit project
* [fugit](https://github.com/floraison/fugit) - Time tools for flor and the floraison project. Cron parsing and occurrence computing. Timestamps and more.## LICENSE
MIT, see [LICENSE.txt](LICENSE.txt)