Method: Flydata::TableDef::RedshiftTableDef.parse_timestamp

Defined in:
lib/flydata/table_def/redshift_table_def.rb

.parse_timestamp(value) ⇒ Object



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/flydata/table_def/redshift_table_def.rb', line 188

def self.parse_timestamp(value)
  if value.kind_of?(Integer) or /^\d+$/ === value
    # Unix epoch in UTC
    t = DateTime.strptime(value.to_s, '%s')
  elsif APACHE_TIMESTAMP_REGEXP.match(value)
    # apache time format
    t = DateTime.strptime(value, "[%d/%b/%Y:%H:%M:%S %Z]")
  else
    t = DateTime.parse(value)
  end
  t = t.new_offset(0) # Redshift Plug-in uses UTC
  t.strftime('%Y-%m-%d %H:%M:%S.%6N')
rescue ArgumentError => ae
  # '0000-00-00 00:00:00' is valid for mysql datetime column
  if value.start_with?('0000-00-00 00:00:00')
    return '0001-01-01 00:00:00.000000'
  else
    raise ae
  end
end