対象:
CRuby
JRuby

時刻文字列のパースと時刻のフォーマット

Timeオブジェクトから任意のフォーマットで時刻文字列を取得するには、Time.strftimeメソッド、時刻を表す文字列からTimeオブジェクトに変換するにはTime.parseメソッドを利用する。

Timeから任意の形式の時刻文字列を取得

Timeオブジェクトから任意の形式の時刻文字列を得るにはTime.strftimeメソッドを利用する。

p Time.now.strftime("%d/%b/%Y %H:%M:%S")
"22/Feb/2010 22:22:22"

フォーマット文字列では以下の指示子を使用可能。

指示子意味
%A曜日の名称 (Sunday, Monday, ...)
%a曜日の省略名 (Sun, Mon, ...)
%B月の名称 (January, February, ...)
%b月の省略名 (Jan, Feb, ...)
%c日付と時刻
%d日 (01-31)
%H24時間制の時 (00-23)
%I12時間制の時 (01-12)
%j年中の通算日 (001-366)
%Lミリ秒 (000-999)
%M分 (00-59)
%m月を表す数字 (01-12)
%Nナノ秒 (000000000-999999999)
%p午前または午後 (AM, PM)
%S秒 (00-60) (60はうるう秒)
%U週を表す数。最初の日曜日が第1週の始まり (00-53)
%W週を表す数。最初の月曜日が第1週の始まり (00-53)
%w曜日を表す数。日曜日が0 (0-6)
%X時刻
%x日付
%Y西暦を表す数
%y西暦の下2桁 (00-99)
%Zタイムゾーン
%%%
Time.#strftime

時刻を表す文字列のパース

時刻を表す文字列をパースしてTimeオブジェクトに変換するにはTime.parseメソッドを利用する。Time.parseメソッドを利用するためにはtimeライブラリが必要となる。

require "time"

t1 = Time.parse("2010/02/22 22:22:22")
p t1
t2 = Time.parse("20100222 222222")
p t2
t3 = Time.parse("2010/02/22")
p t3
t4 = Time.parse("22 Feb 2010")
p t4

以下はこのコードの実行結果である。

Mon Feb 22 22:22:22 +0900 2010
Mon Feb 22 22:22:22 +0900 2010
Mon Feb 22 00:00:00 +0900 2010
Mon Feb 22 00:00:00 +0900 2010

見ての通り、幅広い時刻文字列の形式に対応している。もし、パースできない場合は前処理でTime.parseメソッドがパース可能な形式に整形してやると良いだろう。

Time.parse

Time.strftimeでミリ秒及びナノ秒を表示させる

JRuby 1.4.0とRuby 1.9.1ではTime.strftimeで、従来からの指示子に加えて%L(ミリ秒)、%N(ナノ秒)が利用できる。(ただし、Ruby 1.9.1で可能な%3N等はJRuby 1.4.0では表示できないようだ。また、JRuby 1.4.0では%Lの値と%Nの値とが必ずしも整合しないが原因は不明。)

p "current time is #{Time.now.strftime("%d/%b/%Y %H:%M:%S.%L")}"
"current time is 20/Feb/2010 22:27:09.472"
(2010/02/20)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]