Class: Fluent::Timezone
- Inherits:
-
Object
- Object
- Fluent::Timezone
- Defined in:
- lib/fluent/timezone.rb
Constant Summary collapse
- NUMERIC_PATTERN =
[+-]HH:MM, [+-]HHMM, [+-]HH
%r{\A[+-]\d\d(:?\d\d)?\z}
- NAME_PATTERN =
Region/Zone, Region/Zone/Zone
%r{\A[^/]+/[^/]+(/[^/]+)?\z}
Class Method Summary collapse
-
.formatter(timezone = nil, format = nil) ⇒ Object
Create a formatter for a timezone and optionally a format.
-
.validate(timezone) ⇒ Object
Validate the format of the specified timezone.
-
.validate!(timezone) ⇒ Object
Validate the format of the specified timezone.
Class Method Details
.formatter(timezone = nil, format = nil) ⇒ Object
Create a formatter for a timezone and optionally a format.
An Proc object is returned. If the given timezone is invalid, nil is returned.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/fluent/timezone.rb', line 91 def self.formatter(timezone = nil, format = nil) if timezone.nil? return nil end # [+-]HH:MM, [+-]HHMM, [+-]HH if NUMERIC_PATTERN === timezone offset = Time.zone_offset(timezone) if format return Proc.new {|time| Time.at(time).localtime(offset).strftime(format) } else return Proc.new {|time| Time.at(time).localtime(offset).iso8601 } end end # Region/Zone, Region/Zone/Zone if NAME_PATTERN === timezone begin tz = TZInfo::Timezone.get(timezone) rescue return nil end if format return Proc.new {|time| Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).strftime(format) } else return Proc.new {|time| Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).iso8601 } end end return nil end |
.validate(timezone) ⇒ Object
Validate the format of the specified timezone.
Valid formats are as follows. Note that timezone abbreviations such as PST and JST are not supported intentionally.
1. [+-]HH:MM (e.g. "+09:00")
2. [+-]HHMM (e.g. "+0900")
3. [+-]HH (e.g. "+09")
4. Region/Zone (e.g. "Asia/Tokyo")
5. Region/Zone/Zone (e.g. "America/Argentina/Buenos_Aires")
In the 4th and 5th cases, it is checked whether the specified timezone exists in the timezone database.
When the given timezone is valid, true is returned. Otherwise, false is returned. When nil is given, false is returned.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/fluent/timezone.rb', line 45 def self.validate(timezone) # If the specified timezone is nil. if timezone.nil? # Invalid. return false end # [+-]HH:MM, [+-]HHMM, [+-]HH if NUMERIC_PATTERN === timezone # Valid. It can be parsed by Time.zone_offset method. return true end # Region/Zone, Region/Zone/Zone if NAME_PATTERN === timezone begin # Get a Timezone instance for the specified timezone. TZInfo::Timezone.get(timezone) rescue # Invalid. The string does not exist in the timezone database. return false else # Valid. The string was found in the timezone database. return true end else # Invalid. Timezone abbreviations are not supported. return false end end |
.validate!(timezone) ⇒ Object
Validate the format of the specified timezone.
The implementation of this method calls validate(timezone) method to check whether the given timezone is valid. When invalid, this method raises a ConfigError.
81 82 83 84 85 |
# File 'lib/fluent/timezone.rb', line 81 def self.validate!(timezone) unless validate(timezone) raise ConfigError, "Unsupported timezone '#{timezone}'" end end |