TaKesso's Tech Blog

Web中心の技術メモ

Ruby: 時刻フォーマット文字列

REx - Ruby Examination で解いた問題の解説を自分なりにまとめ直すシリーズです。

問題

d = Date.new(2015, 1, 5)の時、出力結果が01/05/15になるのはどれ?

選択肢

  1. puts d.strftime("%x")
  2. puts d.strftime("%m/%d/%Y")
  3. puts d.strftime("%m/%D/%y")
  4. puts d.strftime("%M/%d/%y")

解答

正解は [1] です

解説

フォーマット文字列の意味

  • 『年・月・日』
    • %C: 世紀 (2009年であれば 20)
    • %Y: 西暦を表す数
    • %y: 西暦の下2桁(00-99)
    • %B: 月の名称(January, February ... )
    • %b: 月の省略名(Jan, Feb ... )
    • %h: %b と同等
    • %m: 月を表す数字(01-12)
    • %d: 日(01-31)
    • %e: 日。一桁の場合、半角空白で埋める ( 1..31)
  • 『曜日・週数・日数』
    • %A: 曜日の名称(Sunday, Monday ... )
    • %a: 曜日の省略名(Sun, Mon ... )
    • %w: 曜日を表す数。日曜日が0(0-6)
    • %u: 月曜日を1とした、曜日の数値表現 (1..7)
    • %U: 週を表す数。最初の日曜日が第1週の始まり(00-53)
    • %W: 週を表す数。最初の月曜日が第1週の始まり(00-53)
    • %V: ISO 8601形式の暦週 (01..53)
    • %j: 年中の通算日(001-366)
  • 『時・分・秒』
    • %H: 24時間制の時(00-23)
    • %I: 12時間制の時(01-12)
    • %k: 24時間制の時。一桁の場合、半角空白で埋める ( 0..23)
    • %l: 12時間制の時。一桁の場合、半角空白で埋める ( 0..12)
    • %M: 分(00-59)
    • %S: 秒(00-60) (60はうるう秒)
    • %L: ミリ秒 (000.999)
    • %N: 秒の小数点以下。桁の指定がない場合は9桁 (ナノ秒)、%6N: マイクロ秒 (6桁)、%3N: ミリ秒 (3桁)
    • %s: 1970-01-01 00:00:00 UTC からの経過秒
  • 『午前午後』
    • %P: 午前または午後(am,pm)
    • %p: 午前または午後(AM,PM)
  • 『合わせ技』
    • %D: 日付 (%m/%d/%y)
    • %x: 同上
    • %F: %Y-%m-%d と同等 (ISO 8601の日付フォーマット)
    • %v: VMS形式の日付 (%e-%b-%Y)
    • %c: 日付と時刻
    • %X: 時刻
    • %R: 24時間制の時刻。%H:%M と同等。
    • %T: 24時間制の時刻。%H:%M:%S と同等。
    • %r: 12時間制の時刻。%I:%M:%S %p と同等。
  • タイムゾーン
  • 『その他』
    • %n: 改行 (\n)
    • %t: タブ文字 (\t)
    • %%: %自身

参考: instance method Time#strftime (Ruby 2.1.0)

実際の出力

require 'date'

d = Date.new(2015, 1, 5)

puts d.strftime("%x")
puts d.strftime("%m/%d/%Y")
puts d.strftime("%m/%D/%y")
puts d.strftime("%M/%d/%y")
01/05/15
01/05/2015
01/01/05/15/15
00/05/15