Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyにおける、日付や時刻の基本と操作を解説します。

他言語と同じように、Rubyにもやはり日付や時刻を簡単に扱える仕組みが用意されています。

この記事を読み終わる頃には、日付や時刻の操作が思い通りにできるようになっているでしょう。

特に、海外からアクセスされるWebシステムを開発される方、必見です!

まず最初は時間の基本 UTCなど

まず最初はRubyを忘れて、時間の基本を確認しましょう。

世界の国々の現在時間は異なっている、つまり時差があるのは今さらいうまでもありません。

日本の時間を基準にして世界各国の時間を考えると、いろいろと問題がでてきます。

例えばお隣の中国とは1時間の時差、つまり日本が1時間進んでいます。ドイツと日本は7時間、つまり日本が7時間進んでいます。ですが、中国とドイツは、その他の国とは・・・と考え始めるとだんだんとややこしくなります。

世界各国が自分の標準時間で物事を語り始めると、さらに複雑です。

今や多国籍企業はめずらしい存在ではありません。大企業でなくても海外とやり取りのある、または海外に支店を置く企業は多数あります。システムは日本に設置、各国からデータを書き込みに来る、というケースもあるでしょう。

このような場合、各国から同じデータベースに自国の標準時にて書き込みを始めると、収集がつかなくなります。世界で統一された時間の基準が欲しくなります。

それが、協定世界時(UTC)と呼ばれるものです。

UTCを基準として、その協定世界時から見て何時間進んでいるかを表現することにより、国ごとの標準時をいうことができます。

日本は協定世界時から9時間の進み、つまり「UTC +9:00」、中国は「UTC +8:00」なので日本より1時間遅れ、と時差をその国の標準時を知るまでもなく計算できるのは便利ですよね。

また、UTCと同じようにGMT(グリニッジ標準時)というものもあり、同じく「日本はGMT +9:00」と表現できます。

最近はUTCが広く使われています。本記事でも、一貫してUTCを基準に解説します。

Rubyにおける日付や時刻 Time/Date

Rubyでは、日付と時刻はそれぞれDateクラス、Timeクラスを使って操作します。

Dateクラスは年月日だけを扱います。Timeクラスは年月日時分秒を扱います。一見してTimeクラスさえあれば事足りるような気がしますがそうではありません。

Dateクラスは、来月の同日や月末日の計算ができるという得意技があります。

現在時刻を表示 Time.now

TimeやDateを使い、現在の日付や時刻を取得してみましょう。

puts Time.now

[実行結果]

2017-10-08 23:04:14 +0900

Time.nowによってTimeオブジェクトが得られます。その結果を表示させています。

表示時刻を書式変更 strftime

Time.nowのもつ標準書式ではなく、それ以外の書式で表示させたい場合は、strftimeを使います。ただし、得られる結果は文字列であることを注意してください。

[書式]

t.strftime(書式)

書式の部分は、ココをご覧ください。

いくつかサンプル的に試してみましょう。

t = Time.now
puts t.strftime("%Y/%m/%d %H:%M:%S %z")

日付の部分をスラッシュ区切りに変えてみました。

書式は比較的自由に設定できます。年月日だけ欲しい場合は、

t = Time.now
puts t.strftime("%Y/%m/%d")

とすれば、

[実行結果]

2017/10/08

が得られます。

時刻を「作る」 mktime

mktimeを使い、年月日時分秒を「自分で作る」ことも可能です。mktimeに引数を渡します。

[書式]

Time.mktime[年, 月, 日, 時, 分, 秒, 秒の端数]

[使用例]

t = Time.mktime(2018,10,9,4,41,00)
puts t

[実行結果]

2018-10-09 04:41:00 +0900

規格に則ったフォーマット iso8501/rfc2822

時間の表現には、何らかの規格に沿ったものもあります。

iso8601

国際標準であるiso8601です。

require "time"
t = Time.now
puts t.iso8601

[実行結果]

2017-10-09T05:00:09+09:00

rfc2822

メールヘッダにある日時の規格であるrfc2822です。同じようにTimeオブジェクトを生成してから、そのオブジェクトの持つ時刻を書式に則って取得します。

require "time"
t = Time.now
puts t.rfc2822

[実行結果]

Mon, 09 Oct 2017 05:02:35 +0900

UTCを取得する

国をまたいだ時間の管理をする場合、UTC +0:00が欲しくなります。その場合、いったんTimeオブジェクトを取得し、UTCに直します。

t = Time.now
puts t.utc

[実行結果]

2017-10-08 20:06:18 UTC

日付を計算する

Timeオブジェクトは、比較や減算が可能です。

t1 = Time.now
sleep 2
t2 = Time.now
puts t2 - t1
puts t2 > t1

[実行結果]

2.005284
true

時間オブジェクトを生成し、そのあと2秒間おいて別のオブジェクトを生成します。そして2つのオブジェクトを引き算するだけで経過時間を取得できました。

比較演算子を使って比較できることも確認できました。

月末日を取得する

どの言語でも苦労する、しかも、とても頻繁に出てくる「月末日を取得する」をやってみましょう。Dateクラスを使って簡単にできます。

require 'date'

d = Date.today

puts Date.new(d.year,d.month,-1)
puts Date.new(2017, 9, -1)

[実行結果]

2017-10-31
2017-09-30

1行目のputsは、実行時の月末日を取得します。2行目のputsは、任意の年月の月末日を取得できることを表しています。

まとめ

本記事では、Rubyにおける日付と時刻の基本を解説しました。

日付や時刻の扱い方を習得し、ログデータの収集や、国際間の日付や時刻の管理などにぜひお役立てください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。