JIS X 3017:2013 プログラム言語Ruby | ページ 39

                                                                                            185
X 3017 : 2013 (ISO/IEC 30170 : 2012)
義とする。
時間帯 : 時間帯である。
15.2.19.2 直接のスーパークラス
Objectクラス
15.2.19.3 日時の計算
この細分箇条で定義する数学的な関数は15.2.19全体で用いる。これらの関数は数学的に厳密な整数値を
計算すると仮定する。
この規格では,うるう秒を考慮しない。ただし,規格適合処理系は,処理系定義の方法によってうるう
秒をサポートしてもよい。
15.2.19.3.1 日
1日当たりのマイクロ秒は次のように計算される。
MicroSecPerDay=24×60×60×106
1970年1月1日00:00 UTCからの経過マイクロ秒tに対応する経過日数は,次のとおり計算される。
t
Day)(t floor
MicroSecPerDay
floor(t)=x ≦ t < x + 1を満たす整数x
マイクロ秒tに対応する日の曜日を表す数は次のように計算される。
WeekDay(t)=(Day(t)+4)を7で除した余り
15.2.19.3.2 年
1年は365日とする。ただし,うるう年は366日とする。うるう年は次のいずれかの条件を満たす年で
ある。
− 4の整数倍であるが,100の整数倍でない。
− 400の整数倍である。
西暦の年yが与えられた場合に,1970年1月1日00:00 UTCからyの初めまでの経過日数は次のとおり
計算される。
y 1969 y 1901 y 1601
DayFromYear( y) 365 (y 1970) floor floor floor
4 100 400
1970年1月1日00:00 UTCからyの初めまでの経過マイクロ秒は,次のように計算される。
MicroSecFromYear(y)=DayFromYear(y)×MicroSecPerDay
1970年1月1日00:00 UTCからの経過マイクロ秒tが与えられた場合に,tに対応する西暦の年yは次
のように計算される。
YearFromTime(t)=MicroSecFromYear (y) ≦ t < MicroSecFromYear(y+1)を満たす整数y
tに対応する年の初めからの通算日数は次のとおり計算される。
DayWithinYear(t)=Day(t)−DayFromYear(YearFromTime(t))
15.2.19.3.3 月
それぞれの月には通常の日数が割り当てられる。ただし,うるう年では余分な1日が2月に割り当てら
れる。それぞれの月は1から12までの整数で識別される(それぞれ1月から12月までに対応する。)。
1970年1月1日00:00 UTCからの経過マイクロ秒tが与えられた場合に,tに対応する日の月の番号は
次のように計算される。

――――― [JIS X 3017 pdf 191] ―――――

186
X 3017 : 2013 (ISO/IEC 30170 : 2012)
1 0 ≦ DayWithinYear(t) < 31の場合
2 31 ≦ DayWithinYear(t) < 59+LeapYear(t)の場合
3 59+LeapYear(t) ≦ DayWithinYear(t) < 90+LeapYear(t)の場合
4 90+LeapYear(t) ≦ DayWithinYear(t) < 120+LeapYear(t)の場合
5 120+LeapYear(t) ≦ DayWithinYear(t) < 151+LeapYear(t)の場合
6 151+LeapYear(t) ≦ DayWithinYear(t) < 181+LeapYear(t)の場合
MonthFromTime(t)=
7 181+LeapYear(t) ≦ DayWithinYear(t) < 212+LeapYear(t)の場合
8 212+LeapYear(t) ≦ DayWithinYear(t) < 243+LeapYear(t)の場合
9 243+LeapYear(t) ≦ DayWithinYear(t) < 273+LeapYear(t)の場合
10 273+LeapYear(t) ≦ DayWithinYear(t) < 304+LeapYear(t)の場合
11 304+LeapYear(t) ≦ DayWithinYear(t) < 334+LeapYear(t)の場合
12 334+LeapYear(t) ≦ DayWithinYear(t) < 365+LeapYear(t)の場合
LeapYear(t)= 1 YearFromTime(t) がうるう年の場合
0 それ以外
15.2.19.3.4 月の中での通算日
1970年1月1日00:00 UTCからの経過マイクロ秒tが与えられた場合に,tに対応する日の月の中での
通算日は次のように計算される。
DayWithinYear(t)+1 Month FromTime(t)=1の場合
DayWithinYear(t)−30 Month FromTime(t)=2の場合
DayWithinYear(t)−58−LeapYear(t) onth FromTime(t)=3の場合
DayWithinYear(t)−89−LeapYear(t) onth FromTime(t)=4の場合
DayWithinYear(t)−119−LeapYear(t) Month FromTime(t)=5の場合
DayWithinYear(t)−150−LeapYear(t) Month FromTime(t)=6の場合
DayWithinMonth(t)=
DayWithinYear(t)−180−LeapYear(t) Month FromTime(t)=7の場合
DayWithinYear(t)−211−LeapYear(t) Month FromTime(t)=8の場合
DayWithinYear(t)−242−LeapYear(t) Month FromTime(t)=9の場合
DayWithinYear(t)−272−LeapYear(t) Month FromTime(t)=10の場合
DayWithinYear(t)−303−LeapYear(t) Month FromTime(t)=11の場合
DayWithinYear(t)−333−LeapYear(t) Month FromTime(t)=12の場合
15.2.19.3.5 時間,分及び秒
1時間,1分,及び1秒当たりのマイクロ秒は,次のとおりである。
MicroSecPerHour=60×60×106
MicroSecPerMinute=60×106
MicroSecPerSecond=106
1970年1月1日00:00 UTCからの経過マイクロ秒tが与えられた場合に,tに対応する(24時間制での)
時間,分,曜日は次のように計算される。
t
HourFromTime(t ) loor を24で除した余り
MicroSecPerHour

――――― [JIS X 3017 pdf 192] ―――――

                                                                                            187
X 3017 : 2013 (ISO/IEC 30170 : 2012)
t
MinuteFromTime(t ) loor を60で除した余り
MicroSecPerMinute
t
SecondFromTime(t ) loor を60で除した余り
MicroSecPerSecond
15.2.19.4 時間帯及び現地時間
プログラムの評価時の時間帯は,処理系が動作しているシステムが提供する時間帯の情報から決定され
る。システムから現地時間帯の情報が得られない場合は,Timeクラスのインスタンスの時間帯属性は処
理系定義とする。
Timeクラスのインスタンスの現地時間は,そのインスタンスのマイクロ秒属性tと時間帯属性zとから
次のように計算される。
LocalTime=t+ZoneOffset(z)
ZoneOffset(z)=zのUTCからの時差をマイクロ秒で表したもの
15.2.19.5 夏時間
規格適合処理系は,処理系の動作するシステムがそれぞれの時間帯の夏時間の情報を提供する場合,
Timeクラスのインスタンスの時間帯属性が夏時間の期間は,そのインスタンスのマイクロ秒属性を調整
することが望ましい。この調整に用いるアルゴリズムは処理系定義とする。
15.2.19.6 特異メソッド
15.2.19.6.1 Time.at
Time.at(*args)
可視性 : public
動作 :
a) rgsの長さが0である場合,又は2より大きい場合は,ArgumentErrorクラスの直接のインスタン
スを例外として発生させる。
b) rgsの長さが1の場合は,その唯一の要素をAとする。
1) がTimeクラスのインスタンスの場合は,Aと同じマイクロ秒属性及び時間帯属性をもつTime
クラスのインスタンスを作成し,それを返す。
2) がIntegerクラスのインスタンス又はFloatクラスのインスタンスの場合,次の手順を行う。
i) Aの値をNとする。
ii) 1970年1月1日00:00 UTCからN×106マイクロ秒後の日時を表すTimeクラスの直接のインス
タンスを作成する。そのインスタンスの時間帯属性はシステムの現地時間帯とする。
iii) 作成したインスタンスを返す。
3) それら以外の場合は,このメソッドの動作は未規定とする。
c) rgsの長さが2の場合は,argsの第1要素,第2要素をそれぞれS,Mとする。
1) がIntegerクラスのインスタンスの場合は,Sの値をNSとする。
2) そうではない場合は,このメソッドの動作は未規定とする。
3) がIntegerクラスのインスタンス又はFloatクラスのインスタンスの場合は,Mの値をNmと
する。
4) そうではない場合は,このメソッドの動作は未規定とする。
5) 1970年1月1日00:00 UTCからNS×106+NMマイクロ秒後の日時を表すTimeクラスの直接のイン

――――― [JIS X 3017 pdf 193] ―――――

188
X 3017 : 2013 (ISO/IEC 30170 : 2012)
スタンスを作成する。そのインスタンスの時間帯属性はシステムの現地時間帯とする。
6) 作成したインスタンスを返す。
15.2.19.6.2 Time.gm
Time.gm(year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
可視性 : public
動作 :
a) ear,day,hour,min,sec,及びusecに対応する整数を,次に示すとおりに計算する。その計算結果
を,それぞれY,D,H,Min,S,及びUとする。
実引数として与えられたオブジェクトOに対応する整数Iは次のように計算する。
1) がIntegerクラスのインスタンスの場合は,Oの値をIとする。
2) がFloatクラスのインスタンスの場合は,Oの整数部分をIとする。
3) がStringクラスのインスタンスの場合,
i) Oの内容が《10進数字》の並びである場合は,その並びを10進数として解釈した値をIとする。
ii) それ以外の場合は,このメソッドの動作は未規定とする。
4) それら以外の場合は,このメソッドの動作は未規定とする。
b) onthに対応する値は次のように計算する。
1) onthがIntegerクラスのインスタンスの場合,monthの値をMonとする。
2) onthがStringクラスのインスタンスの場合,次の手順を行う。
i) monthの内容が表5の下段のいずれかと大文字小文字の違いを除いて一致する場合は,対応する
上段の整数をMonとする。
ii) onthの最初の文字が《10進数字》の場合は,monthに対応する整数を手順a)に従い計算する。そ
の結果をMonとする。
iii) それら以外の場合は,ArgumentErrorクラスの直接のインスタンスを例外として発生させる。
3) そうではない場合,このメソッドの動作は未規定とする。
c) が0 ≦ Y ≦ 138を満たす場合は,このメソッドの動作は処理系定義とする。
d) これまでの手順で計算した整数が次に示す条件を満たさない場合は,ArgumentErrorクラスの直接
のインスタンスを例外として発生させる。
− 1 ≦ Mon ≦ 12
− 1 ≦ D ≦ 31
− 0 ≦ H ≦ 23
− 0 ≦ Min ≦ 59
− 0 ≦ S ≦ 59
Yの値に条件を設けるかどうかは,処理系定義とする。
e) を次の全ての等式を満たす最も小さい整数とする。
− YearFromTime(t)=Y
− MonthFromTime(t)=Mon
− DayWithinMonth(t)=1
f) を次のようにして計算する。
T=t+D×MicroSecPerDay+H×MicroSecPerHour+Min×MicroSecPerMinute+S×106+U

――――― [JIS X 3017 pdf 194] ―――――

                                                                                            189
X 3017 : 2013 (ISO/IEC 30170 : 2012)
g) 1970年1月1日00:00 UTCからTマイクロ秒後の日時を表すTimeクラスの直接のインスタンスを作
成する。そのインスタンスの時間帯属性はUTCとする。
h) 作成したインスタンスを返す。
表5−月名に対応する整数
1 2 3 4 5 6 7 8 9 10 11 12
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
15.2.19.6.3 Time.local
Time.local(year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
可視性 : public
動作 : Time.gmメソッドと同じとする(15.2.19.6.2参照)。ただし,メソッドの戻り値であるTimeクラ
スの直接のインスタンスの時間帯属性は,システムの現地時間帯とする。
15.2.19.6.4 Time.mktime
Time.mktime(year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
可視性 : public
動作 : Time.localメソッドと同じとする(15.2.19.6.3参照)。
15.2.19.6.5 Time.now
Time.now
可視性 : public
動作 : このメソッドは,呼出し時の時刻及びシステムの現地時間帯を表すTimeクラスの直接のインスタ
ンスを返す。このメソッドの動作はnewメソッドと同じとする(15.2.3.3.3参照)。
15.2.19.6.6 Time.utc
Time.utc(year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
可視性 : public
動作 : Time.gmメソッドと同じとする(15.2.19.6.2参照)。
15.2.19.7 インスタンスメソッド
15.2.19.7.1 Time#<=>
<=>(other)
可視性 : public
動作 :
a) therがTimeクラスのインスタンスでない場合は,nilを返す。
b) それ以外の場合は,レシーバのマイクロ秒属性及びotherのマイクロ秒属性を,それぞれTr及びToと
する。
1) r > Toである場合は,その値が1のIntegerクラスのインスタンスを返す。
2) r = Toである場合は,その値が0のIntegerクラスのインスタンスを返す。
3) r < Toである場合は,その値が−1のIntegerクラスのインスタンスを返す。
15.2.19.7.2 Time#+
+(offset)
可視性 : public

――――― [JIS X 3017 pdf 195] ―――――

次のページ PDF 196

JIS X 3017:2013の引用国際規格 ISO 一覧

  • ISO/IEC 30170:2012(IDT)

JIS X 3017:2013の国際規格 ICS 分類一覧