gitlab-chronic 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.gitlab-ci.yml +14 -0
  4. data/.travis.yml +10 -0
  5. data/Gemfile +3 -0
  6. data/HISTORY.md +252 -0
  7. data/LICENSE +21 -0
  8. data/README.md +188 -0
  9. data/Rakefile +68 -0
  10. data/chronic.gemspec +25 -0
  11. data/lib/chronic.rb +155 -0
  12. data/lib/chronic/date.rb +81 -0
  13. data/lib/chronic/definition.rb +128 -0
  14. data/lib/chronic/dictionary.rb +36 -0
  15. data/lib/chronic/handler.rb +97 -0
  16. data/lib/chronic/handlers.rb +672 -0
  17. data/lib/chronic/mini_date.rb +38 -0
  18. data/lib/chronic/parser.rb +222 -0
  19. data/lib/chronic/repeaters/repeater_day.rb +54 -0
  20. data/lib/chronic/repeaters/repeater_day_name.rb +53 -0
  21. data/lib/chronic/repeaters/repeater_day_portion.rb +109 -0
  22. data/lib/chronic/repeaters/repeater_fortnight.rb +72 -0
  23. data/lib/chronic/repeaters/repeater_hour.rb +59 -0
  24. data/lib/chronic/repeaters/repeater_minute.rb +59 -0
  25. data/lib/chronic/repeaters/repeater_month.rb +80 -0
  26. data/lib/chronic/repeaters/repeater_month_name.rb +95 -0
  27. data/lib/chronic/repeaters/repeater_quarter.rb +59 -0
  28. data/lib/chronic/repeaters/repeater_quarter_name.rb +40 -0
  29. data/lib/chronic/repeaters/repeater_season.rb +111 -0
  30. data/lib/chronic/repeaters/repeater_season_name.rb +43 -0
  31. data/lib/chronic/repeaters/repeater_second.rb +43 -0
  32. data/lib/chronic/repeaters/repeater_time.rb +159 -0
  33. data/lib/chronic/repeaters/repeater_week.rb +76 -0
  34. data/lib/chronic/repeaters/repeater_weekday.rb +86 -0
  35. data/lib/chronic/repeaters/repeater_weekend.rb +67 -0
  36. data/lib/chronic/repeaters/repeater_year.rb +78 -0
  37. data/lib/chronic/season.rb +26 -0
  38. data/lib/chronic/span.rb +31 -0
  39. data/lib/chronic/tag.rb +89 -0
  40. data/lib/chronic/tags/grabber.rb +29 -0
  41. data/lib/chronic/tags/ordinal.rb +52 -0
  42. data/lib/chronic/tags/pointer.rb +28 -0
  43. data/lib/chronic/tags/repeater.rb +160 -0
  44. data/lib/chronic/tags/scalar.rb +89 -0
  45. data/lib/chronic/tags/separator.rb +123 -0
  46. data/lib/chronic/tags/sign.rb +35 -0
  47. data/lib/chronic/tags/time_zone.rb +32 -0
  48. data/lib/chronic/time.rb +40 -0
  49. data/lib/chronic/token.rb +61 -0
  50. data/lib/chronic/tokenizer.rb +38 -0
  51. data/lib/chronic/version.rb +3 -0
  52. data/test/helper.rb +12 -0
  53. data/test/test_chronic.rb +203 -0
  54. data/test/test_daylight_savings.rb +122 -0
  55. data/test/test_handler.rb +128 -0
  56. data/test/test_mini_date.rb +32 -0
  57. data/test/test_parsing.rb +1537 -0
  58. data/test/test_repeater_day_name.rb +51 -0
  59. data/test/test_repeater_day_portion.rb +254 -0
  60. data/test/test_repeater_fortnight.rb +62 -0
  61. data/test/test_repeater_hour.rb +68 -0
  62. data/test/test_repeater_minute.rb +34 -0
  63. data/test/test_repeater_month.rb +50 -0
  64. data/test/test_repeater_month_name.rb +56 -0
  65. data/test/test_repeater_quarter.rb +70 -0
  66. data/test/test_repeater_quarter_name.rb +198 -0
  67. data/test/test_repeater_season.rb +40 -0
  68. data/test/test_repeater_time.rb +88 -0
  69. data/test/test_repeater_week.rb +115 -0
  70. data/test/test_repeater_weekday.rb +55 -0
  71. data/test/test_repeater_weekend.rb +74 -0
  72. data/test/test_repeater_year.rb +69 -0
  73. data/test/test_span.rb +23 -0
  74. data/test/test_token.rb +31 -0
  75. metadata +215 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 92fc84f7462613e5b2ce67558d43d87f9a280526ddae7b02d5e9a2aeb56cace3
4
+ data.tar.gz: 411c1b9c6f2fb5d09657d1a1b971ad53c9d7ba3856898bde79ba82f9306a424b
5
+ SHA512:
6
+ metadata.gz: af07bbe9c23cd8f2ddb54fcfc2a1713291ea5b3cd48e880e498eb38f60d385544f23fd6861bcf98f88a1f7d94634d5a65cf09a2b6d356b4e55af53259dcd5bf6
7
+ data.tar.gz: bf5bcf7e44f77c801e3c358da2b4c89b869a8e12c1acbf89022b24a10e200056549c004775f284c0dd014ab8883b6f015466d16410bf11cf7d4aaabb1cea9edd
@@ -0,0 +1,8 @@
1
+ *.rbc
2
+ .yardoc
3
+ /.bundle/
4
+ /pkg/
5
+ /coverage/
6
+ /doc/
7
+ /tags/
8
+ Gemfile.lock
@@ -0,0 +1,14 @@
1
+ image: "ruby:2.6-alpine"
2
+
3
+ cache:
4
+ paths:
5
+ - vendor/ruby
6
+
7
+ before_script:
8
+ - apk add --update git build-base
9
+ - gem install bundler
10
+ - bundle install --path vendor/ruby
11
+
12
+ rspec:
13
+ script:
14
+ - bundle exec rake test
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.4.1
4
+ - 2.3
5
+ - 2.2
6
+ - 2.1
7
+ - 2.0.0
8
+ - 1.9.3
9
+ - jruby-19mode
10
+ - rbx-2
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,252 @@
1
+ # --- Begin gitlab-chronic changes ---
2
+
3
+ # 0.10.3 / 2019-11-23
4
+
5
+ * Fix Daylight Savings parsing (https://gitlab.com/gitlab-org/gitlab-chronic/merge_requests/3)
6
+ * Add .gitlab-ci.yml (https://gitlab.com/gitlab-org/gitlab-chronic/merge_requests/1)
7
+
8
+ # --- End gitlab-chronic changes ---
9
+
10
+ # 0.10.2 / 2013-09-09
11
+
12
+ * Fix 1.8.7 support (due to be dropped in 0.11.0)
13
+ * Bugfix for times with negative zones
14
+
15
+ # 0.10.1 / 2013-08-27
16
+
17
+ * Support `ActiveSupport::TimeZone` (#209, #208)
18
+
19
+ # 0.10.0 / 2013-08-25
20
+
21
+ * Chronic will parse subseconds correctly
22
+ for all supported date/time formats (#195, #198 and #200)
23
+ * Support for date format: dd.mm.yyyy (#197)
24
+ * Option `:hours24` to parse as 24 hour clock (#201 and #202)
25
+ * `:guess` option allows to specify which part of Span to return.
26
+ (accepted values `false`,`true`,`:begin`, `:middle`, `:end`)
27
+ * Replace `rcov` with `SimpleCov` for coverage generation
28
+ * Add more tests
29
+ * Various changes in codebase (#202 and #206)
30
+
31
+ # 0.9.1 / 2013-02-25
32
+
33
+ * Ensure Chronic strips periods from day portions (#173)
34
+ * Properly numerize "twelfth", "twentieth" etc. (#172, James McKinney)
35
+ * Ensure Chronic is compatible with Ruby 2.0.0 (#165, Ravil Bayramgalin)
36
+
37
+ # 0.9.0 / 2012-12-21
38
+
39
+ * Implement Chronic::Parser class and create an instance of this class
40
+ instead of leaving all data in the class level of Chronic
41
+ * Various bug fixes
42
+ * Add support for excel date formats (#149, @jmondo)
43
+ * Added support for time expressions such as '10 till' or 'half
44
+ past two' (#146, @chicagogrooves)
45
+ * Add support for RepeaterDayName, RepeaterMonthName,
46
+ Ordinal/ScalarDay and Time (#153, @kareemk)
47
+
48
+ # 0.8.0 / 2012-09-16
49
+
50
+ * Support parsing "<ordinal> of this month" (#109)
51
+ * Support parsing ISO 8601 format (#115)
52
+ * Support parsing "on <day>" without a timestamp (#117)
53
+ * Fix time parsing regexp (#125)
54
+ * Support time when parsing dd-mm-yyy <time> (#126)
55
+ * Allow anchor handler to accept any separators (at, on) (#128)
56
+ * Support parsing EXIF date format (#112)
57
+ * Start using minitest for testing
58
+ * Ensure periods are interpreted as colons (#81).
59
+ * Support month/day and day/month parsing (#59).
60
+ * Support day(scalar)-month(name)-year(scalar) (#99).
61
+ * Handle text starting with 'a' or 'an' (#101, @steveburkett).
62
+ * Ensure post medium timestamps are correctly formatted (#89)
63
+
64
+ # 0.6.7 / 2012-01-31
65
+
66
+ * Handle day, month names with scalar day and year (Joe Fiorini)
67
+ * Ensure 31st parses correctly with day names (Joe Fiorini)
68
+
69
+ # 0.6.6 / 2011-11-23
70
+
71
+ * `Chronic.parse('thur')` no longer returns `nil` (@harold)
72
+
73
+ # 0.6.5 / 2011-11-04
74
+
75
+ * Fix bug when parsing ordinal repeaters (#73)
76
+ * Added handler support for day_name month_name (@imme5150)
77
+ * Fix bug when parsing strings prefixed with PM
78
+
79
+ # 0.6.4 / 2011-08-08
80
+
81
+ * Fixed bug where 'noon' was parsed as 00:00 rather than 12:00
82
+ with :ambiguous_time_range => :none (Vladimir Chernis)
83
+ * Add support for handling '2009 May 22nd'
84
+ * Add the ability to handle scalar-day/repeater-month-name as well as ordinals
85
+
86
+ # 0.6.3 / 2011-08-01
87
+
88
+ * Ensure 'thu' is parsed as Thursday for 1.8.7 generic timestamp
89
+
90
+ # 0.6.2 / 2011-07-28
91
+
92
+ * Ensure specific endian handlers are prioritised over normal date handlers
93
+ * Recognize UTC as timezone and accept HH::MM timezone offset (Jason Dusek)
94
+
95
+ # 0.6.1 / 2011-07-21
96
+
97
+ * Ensure Handler definitions are executed in the correct order
98
+
99
+ # 0.6.0 / 2011-07-19
100
+
101
+ * Attempting to parse strings with days past the last day of a month will
102
+ now return nil. ex: `Chronic.parse("30th February") #=> nil`
103
+ * All deprecated methods are marked for removal in Chronic 0.7.0
104
+ * Deprecated `Chronic.numericize_numbers` instead use
105
+ `Chronic::Numerizer.numerize`
106
+ * Deprecated `Chronic::InvalidArgumentException` and instead use
107
+ `ArgumentError`
108
+ * Deprecated `Time.construct` and use `Chronic.construct` in place of this
109
+ * Deprecated `Time#to_minidate`, instead use `Chronic::MiniDate.from_time(time)`
110
+ * Add support for handling generic timestamp for Ruby 1.9+
111
+
112
+ # 0.5.0 / 2011-07-01
113
+
114
+ * Replace commas with spaces instead of removing the char (Thomas Walpole)
115
+ * Added tests for RepeaterSeason
116
+ * Re-factored tests. Now rather than having a test_parsing method for testing
117
+ all handlers, break them down independent of handler method. For example
118
+ with handler `handle_sm_sd_sy` the subsequent test would be
119
+ `test_handle_sm_sd_sy`
120
+ * Added support for parsing ordinal-dates/month-names/year, ie:
121
+ `2nd of May 1995`
122
+ * Added support for parsing ordinal-dates and month names, ie:
123
+ `22nd of February at 6:30pm`
124
+ * Fix `Time.construct` leap year checking. Instead use `Date.leap?(year)`
125
+
126
+ # 0.4.4 / 2011-06-12
127
+
128
+ * Fix RepeaterYear for fetching past year offsets when the current day is
129
+ later than the last day of the same month in a past year (leap years) ie
130
+ on 29th/feb (leap year) `last year` should (and now does) return 28th/feb
131
+ instead of 1st/march
132
+ * Opt in for gem testing http://test.rubygems.org/
133
+
134
+ # 0.4.3 / 2011-06-08
135
+
136
+ * Fix issue with parsing 1:xxPM -- Ensure 1 is treated as ambiguous, not
137
+ just >1
138
+
139
+ # 0.4.2 / 2011-06-07
140
+
141
+ * Fix MonthRepeater for fetching past month offsets when current day is
142
+ later than the last day of a past month (ie on 29th of March when parsing
143
+ `last month` Chronic would return March instead of February. Now Chronic
144
+ returns the last day of the past month)
145
+
146
+ # 0.4.1 / 2011-06-05
147
+
148
+ * Fix MiniDate ranges for parsing seasons (Thomas Walpole)
149
+
150
+ # 0.4.0 / 2011-06-04
151
+
152
+ * Ensure context is being passed through grabbers. Now "Sunday at 2:18pm"
153
+ with `:context => :past` will return the correct date
154
+ * Support parsing ordinal strings (eg first, twenty third => 1st, 23rd)
155
+ * Seasons now ignore DST and return 00 as an hour
156
+ * Support parsing 2 digit years and added `ambiguous_year_future_bias` option
157
+ * Support parsing 'thurs' for Thursday
158
+ * Fix pre_normalize() to remove periods before numerizing
159
+ * Fix RepeaterDays to not add an extra hour in future tense. This meant
160
+ when parsing 'yesterday' after 11PM, Chronic would return today
161
+ * Discard any prefixed 0 for time strings when using post noon portion
162
+ * Gemspec updates for RubyGems deprecations
163
+ * Ensure 0:10 is treated like 00:10
164
+ * Ensure we load classes after setting Chronic class instance variables
165
+ so we can debug initialization and do assignments at compile time
166
+ * Added a Tag.scan_for method for DRYing up some scanning code
167
+ * Move some classes into their own files for maintainability
168
+ * Numerizer.andition should be a private class method, make it so
169
+ * Namespaced Numerizer, Season and MiniDate (Sascha Teske)
170
+ * Support for Ruby 1.9 (Dave Lee, Aaron Hurley)
171
+ * Fix `:context => :past` where parsed date is in current month (Marc Hedlund)
172
+ * Fix undefined variable in RepeaterHour (Ryan Garver)
173
+ * Added support for parsing 'Fourty' as another mis-spelling (Lee Reilly)
174
+ * Added ordinal format support: ie 'February 14th, 2004' (Jeff Felchner)
175
+ * Fix dates when working with daylight saving times (Mike Mangino)
176
+
177
+ # 0.3.0 / 2010-10-22
178
+
179
+ * Fix numerizer number combination bug (27 Oct 2006 7:30pm works now)
180
+ * Allow numeric timezone offset (e.g -0500)
181
+ * Disregard commas (so as to not return nil)
182
+ * Fix parse of (am|pm|oclock) separation to handle "Ham sandwich" properly
183
+ * Handle 'on' e.g. 5pm on Monday
184
+ * Support seasons
185
+ * Support weekend/weekday
186
+ * Add endianness option
187
+ * Update version number in the module
188
+ * Fix/improve logic checks in Ordinal, and Scalar
189
+ * Parse 'a' or 'p' as 'am' and 'pm' google-calendar style
190
+ * Dates < 1 are not valid
191
+ * Fix bugs related to timezone offset
192
+ * Use RakeGem for build management
193
+ * Reformat README and HISTORY to use Markdown
194
+ * Global whitespace removal
195
+
196
+ # 0.2.3
197
+
198
+ * Fix 12am/12pm
199
+
200
+ # 0.2.2
201
+
202
+ * Add missing files (damn you manifest)
203
+
204
+ # 0.2.1
205
+
206
+ * Fix time overflow issue
207
+ * Implement "next" for minute repeater
208
+ * Generalize time dealiasing to dealias regardless of day portion and
209
+ time position
210
+ * Add additional token match for cases like "friday evening at 7" and
211
+ "tomorrow evening at 7"
212
+ * Add support for Time#to_s output format: "Mon Apr 02 17:00:00 PDT 2007"
213
+
214
+ # 0.2.0 2007-03-20
215
+
216
+ * Implement numerizer, allowing the use of number words (e.g. five weeks ago)
217
+
218
+ # 0.1.6 2006-01-15
219
+
220
+ * Add 'weekend' support
221
+
222
+ # 0.1.5 2006-12-20
223
+
224
+ * Fix 'aug 20' returning next year if current month is august
225
+ * Modify behavior of 'from now'
226
+ * Add support for seconds on times, and thus db timestamp format:
227
+ "2006-12-20 18:04:23"
228
+ * Make Hoe compliant
229
+
230
+ # 0.1.4
231
+
232
+ * Remove verbose error checking code. oops. :-/
233
+
234
+ # 0.1.3
235
+
236
+ * improved regexes for word variations
237
+ * Fix a bug that caused "today at 3am" to return nil if current time is
238
+ after 3am
239
+
240
+ # 0.1.2
241
+
242
+ * Remove Date dependency (now works on windows properly without fiddling)
243
+
244
+ # 0.1.1
245
+
246
+ * Run to_s on incoming object
247
+ * Fix loop loading of repeaters files (out of order on some machines)
248
+ * Fix find_within to use this instead of next (was breaking "today at 6pm")
249
+
250
+ # 0.1.0
251
+
252
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) Tom Preston-Werner
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,188 @@
1
+ Chronic
2
+ =======
3
+
4
+ This is a fork of https://github.com/mojombo/chronic since that project
5
+ does not appear to be maintained.
6
+
7
+ Chronic is a natural language date/time parser written in pure Ruby. See below
8
+ for the wide variety of formats Chronic will parse.
9
+
10
+ ## Installation
11
+
12
+ ```
13
+ $ gem install chronic
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```ruby
19
+ require 'chronic'
20
+
21
+ Time.now #=> Sun Aug 27 23:18:25 PDT 2006
22
+
23
+ Chronic.parse('tomorrow')
24
+ #=> Mon Aug 28 12:00:00 PDT 2006
25
+
26
+ Chronic.parse('monday', :context => :past)
27
+ #=> Mon Aug 21 12:00:00 PDT 2006
28
+
29
+ Chronic.parse('this tuesday 5:00')
30
+ #=> Tue Aug 29 17:00:00 PDT 2006
31
+
32
+ Chronic.parse('this tuesday 5:00', :ambiguous_time_range => :none)
33
+ #=> Tue Aug 29 05:00:00 PDT 2006
34
+
35
+ Chronic.parse('may 27th', :now => Time.local(2000, 1, 1))
36
+ #=> Sat May 27 12:00:00 PDT 2000
37
+
38
+ Chronic.parse('may 27th', :guess => false)
39
+ #=> Sun May 27 00:00:00 PDT 2007..Mon May 28 00:00:00 PDT 2007
40
+
41
+ Chronic.parse('6/4/2012', :endian_precedence => :little)
42
+ #=> Fri Apr 06 00:00:00 PDT 2012
43
+
44
+ Chronic.parse('INVALID DATE')
45
+ #=> nil
46
+ ```
47
+
48
+ If the parser can find a date or time, either a Time or Chronic::Span
49
+ will be returned (depending on the value of `:guess`). If no
50
+ date or time can be found, `nil` will be returned.
51
+
52
+ See `Chronic.parse` for detailed usage instructions.
53
+
54
+ ## Examples
55
+
56
+ Chronic can parse a huge variety of date and time formats. Following is a
57
+ small sample of strings that will be properly parsed. Parsing is case
58
+ insensitive and will handle common abbreviations and misspellings.
59
+
60
+ #### Simple
61
+
62
+ * thursday
63
+ * november
64
+ * summer
65
+ * friday 13:00
66
+ * mon 2:35
67
+ * 4pm
68
+ * 10 to 8
69
+ * 10 past 2
70
+ * half past 2
71
+ * 6 in the morning
72
+ * friday 1pm
73
+ * sat 7 in the evening
74
+ * yesterday
75
+ * today
76
+ * tomorrow
77
+ * last week
78
+ * next week
79
+ * this tuesday
80
+ * next month
81
+ * last winter
82
+ * this morning
83
+ * last night
84
+ * this second
85
+ * yesterday at 4:00
86
+ * last friday at 20:00
87
+ * last week tuesday
88
+ * tomorrow at 6:45pm
89
+ * afternoon yesterday
90
+ * thursday last week
91
+
92
+ #### Complex
93
+
94
+ * 3 years ago
95
+ * a year ago
96
+ * 5 months before now
97
+ * 7 hours ago
98
+ * 7 days from now
99
+ * 1 week hence
100
+ * in 3 hours
101
+ * 1 year ago tomorrow
102
+ * 3 months ago saturday at 5:00 pm
103
+ * 7 hours before tomorrow at noon
104
+ * 3rd wednesday in november
105
+ * 3rd month next year
106
+ * 3rd thursday this september
107
+ * 4th day last week
108
+ * fourteenth of june 2010 at eleven o'clock in the evening
109
+ * may seventh '97 at three in the morning
110
+
111
+ #### Specific Dates
112
+
113
+ * January 5
114
+ * 22nd of june
115
+ * 5th may 2017
116
+ * February twenty first
117
+ * dec 25
118
+ * may 27th
119
+ * October 2006
120
+ * oct 06
121
+ * jan 3 2010
122
+ * february 14, 2004
123
+ * february 14th, 2004
124
+ * 3 jan 2000
125
+ * 17 april 85
126
+ * 5/27/1979
127
+ * 27/5/1979
128
+ * 05/06
129
+ * 1979-05-27
130
+ * Friday
131
+ * 5
132
+ * 4:00
133
+ * 17:00
134
+ * 0800
135
+
136
+ #### Specific Times (many of the above with an added time)
137
+
138
+ * January 5 at 7pm
139
+ * 22nd of june at 8am
140
+ * 1979-05-27 05:00:00
141
+ * 03/01/2012 07:25:09.234567
142
+ * 2013-08-01T19:30:00.345-07:00
143
+ * 2013-08-01T19:30:00.34-07:00
144
+ * etc
145
+
146
+
147
+ ## Time Zones
148
+
149
+ Chronic allows you to set which Time class to use when constructing times. By
150
+ default, the built in Ruby time class creates times in your system's local
151
+ time zone. You can set this to something like ActiveSupport's
152
+ [TimeZone](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
153
+ class to get full time zone support.
154
+
155
+ ```
156
+ >> Time.zone = "UTC"
157
+ >> Chronic.time_class = Time.zone
158
+ >> Chronic.parse("June 15 2006 at 5:45 AM")
159
+ => Thu, 15 Jun 2006 05:45:00 UTC +00:00
160
+ ```
161
+
162
+ ## Limitations
163
+
164
+ Chronic uses Ruby's built in Time class for all time storage and computation.
165
+ Because of this, only times that the Time class can handle will be properly
166
+ parsed. Parsing for times outside of this range will simply return `nil`.
167
+ Support for a wider range of times is planned for a future release.
168
+
169
+
170
+ ## Contribute
171
+
172
+ If you'd like to hack on Chronic, start by forking the repo on GitHub:
173
+
174
+ https://github.com/mojombo/chronic
175
+
176
+ The best way to get your changes merged back into core is as follows:
177
+
178
+ 1. Clone down your fork
179
+ 1. Create a thoughtfully named topic branch to contain your change
180
+ 1. Install the development dependencies by running `bundle install`
181
+ 1. Hack away
182
+ 1. Add tests and make sure everything still passes by running `bundle exec rake`
183
+ 1. Ensure your tests pass in multiple timezones. ie `TZ=utc bundle exec rake` `TZ=BST bundle exec rake`
184
+ 1. If you are adding new functionality, document it in the README
185
+ 1. Do not change the version number, we will do that on our end
186
+ 1. If necessary, rebase your commits into logical chunks, without errors
187
+ 1. Push the branch up to GitHub
188
+ 1. Send a pull request for your branch