time_zone_converter 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -4
- data/README.md +67 -12
- data/img/time-zone.gif +0 -0
- data/lib/time_zone_converter.rb +29 -13
- data/lib/time_zone_converter/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9da080f96c7de30913760de1e43e35f3fb7f0d088e8b6b9ac217e6a68ffd964b
|
4
|
+
data.tar.gz: a91db4a3b1364222e35b247f760f2caa9ebc1dbecfa76430b798f697c94d21d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb07e9d4d82bc44b1094df087463a90a228ae9552c99cbb77b40598128795f69d9a81b98b029a4a2825fa08bc85c2e0bcc0b11ab0714246403277c1b3c95a07b
|
7
|
+
data.tar.gz: fb80ef816c59ac156469c8b7b1d7966a13ba3ddd16424da31bd9ae4530327677cda0b2c2c803052b2025ea67b8940d090106555fe5510bc84ae322e16e21f4cc
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
time_zone_converter (0.2.
|
4
|
+
time_zone_converter (0.2.4)
|
5
5
|
activesupport
|
6
6
|
nearest_time_zone
|
7
7
|
oj
|
@@ -25,7 +25,7 @@ GEM
|
|
25
25
|
multi_json (~> 1.8)
|
26
26
|
concurrent-ruby (1.1.5)
|
27
27
|
diff-lcs (1.3)
|
28
|
-
i18n (1.
|
28
|
+
i18n (1.7.0)
|
29
29
|
concurrent-ruby (~> 1.0)
|
30
30
|
kdtree (0.4)
|
31
31
|
minitest (5.12.2)
|
@@ -36,7 +36,7 @@ GEM
|
|
36
36
|
require_all
|
37
37
|
oj (3.9.2)
|
38
38
|
rake (10.5.0)
|
39
|
-
require_all (
|
39
|
+
require_all (3.0.0)
|
40
40
|
rspec (3.8.0)
|
41
41
|
rspec-core (~> 3.8.0)
|
42
42
|
rspec-expectations (~> 3.8.0)
|
@@ -60,7 +60,7 @@ GEM
|
|
60
60
|
timecop (0.9.1)
|
61
61
|
tzinfo (1.2.5)
|
62
62
|
thread_safe (~> 0.1)
|
63
|
-
zeitwerk (2.
|
63
|
+
zeitwerk (2.2.0)
|
64
64
|
|
65
65
|
PLATFORMS
|
66
66
|
ruby
|
data/README.md
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
# TimeZoneConverter
|
2
2
|
|
3
|
-
|
4
|
-
It does support a multiple cities, but it may be a bit slow in that case.
|
5
|
-
Any ideas how to make it faster are highly welcomed.
|
3
|
+

|
6
4
|
|
7
|
-
Inspired by:
|
8
|
-
https://www.timeanddate.com/worldclock/converter.html
|
5
|
+
A small gem, that can be used as a Command Line Interface. Inspired by:
|
9
6
|
|
10
|
-
|
11
|
-
|
7
|
+
- https://www.timeanddate.com/worldclock/converter.html
|
8
|
+
- https://stackoverflow.com/questions/8349817/ruby-gem-for-finding-timezone-of-location
|
9
|
+
|
10
|
+
In a few words, it prints out the time in other cities. Cities are passed as arguments.
|
12
11
|
|
13
12
|
## Usage:
|
14
13
|
|
@@ -16,22 +15,61 @@ For lat, long calculation it uses another gem: https://rubygems.org/gems/nearest
|
|
16
15
|
```
|
17
16
|
time_zone_converter c Warszawa Bangkok
|
18
17
|
```
|
18
|
+
Output:
|
19
|
+
```
|
20
|
+
[
|
21
|
+
["Warszawa", Tue, 22 Oct 2019 13:30:02 CEST +02:00],
|
22
|
+
["Bangkok", Tue, 22 Oct 2019 18:30:02 +07 +07:00]
|
23
|
+
]
|
24
|
+
```
|
19
25
|
|
20
26
|
### 'ct' command: given time in other cities (formant 'HH:MM' 24-hour)
|
21
27
|
```
|
22
28
|
time_zone_converter ct 'Chiang Mai' Skopje '19:00'
|
23
29
|
```
|
30
|
+
Output:
|
31
|
+
```
|
32
|
+
[
|
33
|
+
["Chiang Mai", 2019-10-22 19:00:00 +0700],
|
34
|
+
["Skopje", Tue, 22 Oct 2019 14:00:00 CEST +02:00]
|
35
|
+
]
|
36
|
+
```
|
37
|
+
|
38
|
+
Note: Time range are also supported:
|
24
39
|
|
25
|
-
### 'ctu' command: given UTC+0 time in other cities
|
26
40
|
```
|
27
|
-
time_zone_converter
|
41
|
+
time_zone_converter ct Warszawa Bangkok '19:00-21:00'
|
28
42
|
```
|
29
43
|
|
44
|
+
Output:
|
30
45
|
|
31
|
-
|
46
|
+
```
|
47
|
+
[
|
48
|
+
["Warszawa",
|
49
|
+
[
|
50
|
+
2019-10-29 19:00:00 +0100,
|
51
|
+
2019-10-29 21:00:00 +0100
|
52
|
+
]
|
53
|
+
],
|
54
|
+
["Bangkok",
|
55
|
+
[
|
56
|
+
Wed, 30 Oct 2019 01:00:00 +07 +07:00,
|
57
|
+
Wed, 30 Oct 2019 03:00:00 +07 +07:00
|
58
|
+
]
|
59
|
+
]
|
60
|
+
]
|
61
|
+
```
|
32
62
|
|
63
|
+
### 'ctu' command: given UTC+0 time in other cities
|
33
64
|
```
|
34
|
-
|
65
|
+
time_zone_converter ctu Bangkok Warszawa '10:00'
|
66
|
+
```
|
67
|
+
Output:
|
68
|
+
```
|
69
|
+
[
|
70
|
+
["Bangkok", Tue, 22 Oct 2019 17:00:00 +07 +07:00],
|
71
|
+
["Warszawa", Tue, 22 Oct 2019 12:00:00 CEST +02:00]
|
72
|
+
]
|
35
73
|
```
|
36
74
|
|
37
75
|
### Help:
|
@@ -39,4 +77,21 @@ time_zone_converter ctu Bangkok Warszawa '10:00'
|
|
39
77
|
```
|
40
78
|
time_zone_converter
|
41
79
|
time_zone_converter help c
|
42
|
-
```
|
80
|
+
```
|
81
|
+
|
82
|
+
### More
|
83
|
+
|
84
|
+
It supports multiple cities, however, it may be a bit slow in that case.
|
85
|
+
Any ideas how to make it faster are highly welcomed :)
|
86
|
+
|
87
|
+
Technically, this gem uses other gems under the hood:
|
88
|
+
`cities` gem, see here:
|
89
|
+
https://github.com/joecorcoran/cities
|
90
|
+
which provides latitude and longitude for all cities around the world.
|
91
|
+
|
92
|
+
The code responsible for extracting json data is placed in `json_data_transformer.rb` file.
|
93
|
+
|
94
|
+
For nearest time zone calculation it uses another gem called `nearest_tine_zone`:
|
95
|
+
https://rubygems.org/gems/nearest_time_zone
|
96
|
+
|
97
|
+
Summing up, it does not use any external API, just pure Ruby with ActiveSupport dependency.
|
data/img/time-zone.gif
ADDED
Binary file
|
data/lib/time_zone_converter.rb
CHANGED
@@ -50,29 +50,45 @@ module TimeZoneConverter
|
|
50
50
|
time_zone = NearestTimeZone.to(lat.to_f, lng.to_f)
|
51
51
|
end
|
52
52
|
|
53
|
+
# time is a Time object or an Array of Time objects
|
53
54
|
def self.get_time(city, time)
|
54
55
|
time_zone = get_nearest_time_zone(city)
|
55
|
-
time.
|
56
|
+
if time.is_a? Array
|
57
|
+
time.map { |t| t.in_time_zone(time_zone) }
|
58
|
+
else
|
59
|
+
time.in_time_zone(time_zone)
|
60
|
+
end
|
56
61
|
end
|
57
62
|
|
58
63
|
ISO_TIME = /\A(\d\d):(\d\d)\z/
|
64
|
+
ISO_TIME_RANGE = /\A(\d\d):(\d\d)-(\d\d):(\d\d)\z/
|
59
65
|
|
66
|
+
# Inspired by: https://github.com/rails/rails/blob/aeba121a83965d242ed6d7fd46e9c166079a3230/activemodel/lib/active_model/type/helpers/time_value.rb#L65
|
67
|
+
# @returns: Time object or an Array of Time objects
|
60
68
|
def self.string_to_time(time, time_zone)
|
61
69
|
return time unless time.is_a? String
|
70
|
+
current_time = Time.new.utc
|
71
|
+
zone = ActiveSupport::TimeZone[time_zone]
|
62
72
|
|
63
73
|
if time =~ ISO_TIME
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
current_time.year,
|
69
|
-
|
70
|
-
current_time.day,
|
71
|
-
$1.to_i,
|
72
|
-
$2.to_i,
|
73
|
-
0,
|
74
|
-
zone
|
75
|
-
)
|
74
|
+
new_time(current_time.year, current_time.month, current_time.day, $1.to_i, $2.to_i, 0, 0, zone)
|
75
|
+
elsif time =~ ISO_TIME_RANGE
|
76
|
+
[
|
77
|
+
new_time(current_time.year, current_time.month, current_time.day, $1.to_i, $2.to_i, 0, 0, zone),
|
78
|
+
new_time(current_time.year, current_time.month, current_time.day, $3.to_i, $4.to_i, 0, 0, zone)
|
79
|
+
]
|
76
80
|
end
|
77
81
|
end
|
82
|
+
|
83
|
+
def self.new_time(year, mon, mday, hour, min, sec, microsec, zone)
|
84
|
+
Time.new(
|
85
|
+
year,
|
86
|
+
mon,
|
87
|
+
mday,
|
88
|
+
hour,
|
89
|
+
min,
|
90
|
+
sec,
|
91
|
+
zone
|
92
|
+
)
|
93
|
+
end
|
78
94
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_zone_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafał Trojanowski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -185,6 +185,7 @@ files:
|
|
185
185
|
- bin/setup
|
186
186
|
- data/cities.json
|
187
187
|
- exe/time_zone_converter
|
188
|
+
- img/time-zone.gif
|
188
189
|
- lib/time_zone_converter.rb
|
189
190
|
- lib/time_zone_converter/cli.rb
|
190
191
|
- lib/time_zone_converter/json_data_transformer.rb
|