Unix timestamps in Ruby

Everything Ruby needs for Unix timestamps: the current epoch time in seconds and milliseconds, timestamp-to-date and date-to-timestamp conversion, and ISO 8601 parsing. Ruby's Time is pleasant, with one setup note: iso8601 lives in the standard library's time extension, so scripts need require "time" (Rails loads it for you). There's a live converter at the bottom for checking any value the snippets produce.

Get the current Unix timestamp

seconds = Time.now.to_i             # 1700000000
millis = (Time.now.to_f * 1000).to_i # 1700000000000

Convert a timestamp to a Time

t = Time.at(1700000000).utc
# 2023-11-14 22:13:20 UTC

Time.at renders in the process's local zone; chain .utc for the UTC reading.

Convert a Time to a timestamp

seconds = t.to_i
millis = (t.to_f * 1000).to_i

Parse and format ISO 8601

require "time"

t = Time.iso8601("2023-11-14T22:13:20Z")
s = t.utc.iso8601  # "2023-11-14T22:13:20Z"

Prefer Time.iso8601 over Time.parse for machine input; parse guesses at ambiguous formats.

Check a value

Detected: Unix timestamp (seconds)

Your timezone

UTC · GMT+00:00 · UTC

Tue, Nov 14, 2023, 10:13:20 PM

Common formats

UTC

Tue, Nov 14, 2023, 10:13:20 PM

ISO 8601

2023-11-14T22:13:20.000Z

Unix (seconds)

1700000000

Unix (millis)

1700000000000

Relative

World clock

Los Angeles PST

Tue, Nov 14, 2023, 02:13:20 PM

GMT-08:00

Chicago CST

Tue, Nov 14, 2023, 04:13:20 PM

GMT-06:00

New York EST

Tue, Nov 14, 2023, 05:13:20 PM

GMT-05:00

London GMT

Tue, Nov 14, 2023, 10:13:20 PM

GMT+00:00

Paris CET

Tue, Nov 14, 2023, 11:13:20 PM

GMT+01:00

Kolkata IST

Wed, Nov 15, 2023, 03:43:20 AM

GMT+05:30

Shanghai CST

Wed, Nov 15, 2023, 06:13:20 AM

GMT+08:00

Tokyo JST

Wed, Nov 15, 2023, 07:13:20 AM

GMT+09:00

Sydney AEDT

Wed, Nov 15, 2023, 09:13:20 AM

GMT+11:00

Common questions

Time, Date, or DateTime?
Time for anything timestamp-shaped. Date for pure calendar dates. DateTime is discouraged by Ruby's own docs; it's slower and its arithmetic differs subtly.
How does Rails change this?
Rails adds Time.zone (Time.zone.now, Time.zone.at(ts)) which respects the app's configured zone rather than the server's. In a Rails app, use Time.zone consistently and let ActiveRecord store UTC.
Why does Time.parse give surprising results?
It accepts almost anything and guesses, "11/14/2023" vs "14/11/2023" ambiguity included. For API input, use Time.iso8601, which fails loudly on anything nonstandard.

Related converters