0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyで時刻の書式化の色々まとめ

Last updated at Posted at 2018-11-07

#背景
Ruby技術者認定試験の勉強をしていて、毎回間違える時刻の書式化(特にstrftimeメソッドの書式設定)をこの際まとめて自己満足してしまおう、あわよくば色々な人に見てもらいたいな、というもの。

#Timeクラス
Timeクラスは、OSが提供するシステムの時刻機能をRubyから使用するものです。もっとも基本的な機能としてTime.nowまたはTime.newで現在時刻を得る機能があります。ただし、Timeクラスは時刻は提供しますが日付まで提供することはできません。

main.rb
p Time.now  #  => 2018-11-07 23:07:30 +0900

#(おまけ)Dateクラス
require 'date'を実行することによって、日付を表現するDateクラスと、日付と時刻を表現するDateTimeクラスを使用することができます。Dateオブジェクトは、年月日から日付オブジェクトを得ることで様々な使い方をすることができます。また、閏年判定や現在日時を得る機能などもあります。

date.rb
require 'date'

date = Date.new(1995,12,21) #年月日から日付オブジェクトを生成
p date

p Date.leap?(date.year) #1995年がうるう年かどうかを判定

today = Date.today #現在の日付を日付オブジェクトとして生成
p today #執筆当時の日時

p today.sunday? #今日が日曜日かどうかを判定

実行結果

#<Date: 1995-12-21 ((2450073j,0s,0n),+0s,2299161j)>
false
#<Date: 2018-11-07 ((2458430j,0s,0n),+0s,2299161j)>
false

#Time#strftime メソッド

Time#strftimeは、Timeオブジェクトが保持する時刻を書式文字列で指定した形式で書式化して文字列に変換するメソッドです。

time.rb
p Time.now.strftime("%x") # =>"11/07/18"

Date、DateTimeクラスについても同じ使い方です。

#書式設定の文字列フォーマット

strftimeメソッドで、書式文字列として使われるもの(time.rbで言う「%x」)が結構種類が多くややこしいので(個人的な感想)まとめてみます。

##よく使いそうなもの

  • %Y ...西暦
  • %y ...西暦の下2桁(00-99)
  • %m ...月(01-12)
  • %d ...日(01-31)
time.rb
p Time.now.strftime("%y/%m/%d") # => "18/11/08"
p Time.now.strftime("%Y-%m-%d") # => "2018-11-08"

##知っておくといいもの

  • %A ...曜日の名称(Sunday, Monday, ...)
  • %a ...曜日の略称(Sun, Mon, ...)
  • %H ...時(24時間表記。00-23)
  • %I ...時(12時間表記。01-12)
  • %M ...(00-59)月と間違えやすい。
  • %S ...(00-60、60はうるう秒)大文字です。
  • %s ...1970年1月1日0:00:00からの経過秒数
time.rb
require 'date'

p DateTime.now.strftime("%Y/%m/%d(%a) %H:%M:%S")
# => "2018/11/08(Thu) 01:21:16"

##便利な表現

  • %c ...日付と時刻。小文字。
  • %C ...西暦の上2桁
time.rb
p Time.now.strftime("%c")
# => "Thu Nov  8 01:27:13 2018"
  • %D ...日付。**%m/%d/%y**と同じ。順番に注意。
  • %F ...日付。%Y-%m-%dと同じ。
  • %X ...時刻。%H:%M:%Sと同じ。
  • %R ...時刻。%H:%Mと同じ。(@scivolaさんより。ありがとうございます!)
  • %x ...時刻。%Dと同じ。

##その他
strftimeメソッドの文字列の中で%を単独で使いたい場合は%%と表記します。

time.rb
p DateTime.now.strftime("%Y/%m/%d(%a) %H:%M:%S There is a 40%% chance of rain today.")

# => "2018/11/08(Thu) 01:55:52 There is a 40% chance of rain today."

他にもたくさんのフォーマットがあります。もっと知りたい方はRubyリファレンスマニュアル(class Time)を見てみてください。

#まとめ

なかなか多くの種類のフォーマットが用意されていて、まとめたつもりが逆に混乱を招きそうです。いい覚え方や誤字脱字、指摘訂正などどんどんお待ちしています。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?