ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

Ruby 日時をつくるときの桁あわせ

Date.new

2018年11月9日を作りたい場合。

エラーになる例

require 'date'
p Date.new(2018,11,09)


エラー表示

Invalid octal digit
p Date.new(2018,11,09)
                   ^~


日にち09の0が余計なので0をとる
一桁月の場合も同様

修正後

require 'date'
p Date.new(2018,11,9)


#<Date: 2018-11-09 ((2458432j,0s,0n),+0s,2299161j)>


Time.parse

文字列からTimeオブジェクトの6分6秒57を作りたい場合。

エラーになる例

require 'time'
p Time.parse("06:06.57")


エラー表示

mday out of range (ArgumentError)


時間の桁が必要なのでつけ加える

修正後

require 'time'
p Time.parse("00:06:06.57")


2018-11-12 00:06:06 +0900


コンマ以下の秒が表示されていないが値は保持されているのでstrftimeで文字列に戻すときは表示できる。

require 'time'
goal_time = Time.parse("00:06:06.57")
p goal_time
p goal_time.strftime("%-M:%S.%2N")


2018-11-12 00:06:06 +0900
"6:06.57"


今回の環境

macOS 10.14.1
Ruby 2.5.1p57