こんにちは、エンジニアのさもです。
Railsのstrftimeメソッドってめっちゃ便利ですよね。
webアプリを作っていると日時っていろんなフォーマットで表示する必要があるので、よく使っています。
今回、英語圏の方用にフォーマットを作っていたのですが、pm、amとか月の英語表示とかも使えて、さらに便利だなと思いました。
そこで、どんな引数があるのかRuby on Railsドキュメントで調べてみてみました。
スポンサーリンク
ページを開くと表形式で一覧が載っていますね。
でも、%X
のところをみてると、「時刻」としか書いてないです。
何が表示されるのか試そうとしたのですが、いっそうのこと、このページをスクレイピングして、全部試してみようと思ったのです。
rubyでのスクレイピング&クローリングの基本的な書き方は、以下のエントリに書きました。今回は特に解説しないので、何をやってるんだという方は見てみてください。
以下、コードです。
require 'open-uri' require 'robotex' require 'erb' railsdoc_url = "http://railsdoc.com/references/strftime" @codes = [] @current_time = Time.now if Robotex.new("Crawler").allowed?(railsdoc_url) open(railsdoc_url) do |file| page = file.read # テーブル内で、%なんとかってなっている行を探す page.scan(/<tr>(.*?)<td>\%(.*?)<\/td>(.*?)<td>(.*?)<\/td>(.*?)<\/tr>/).each do |time| @codes << { code: time[1], # %AのAを取得 context: time[3].encode("utf-8"),# 説明を取得 sample: @current_time.strftime("%#{time[1]}") # 実行例を取得 } end end # htmlファイルを作成 File.open("./time_format.html", "w") do |file| file.puts(ERB.new(File.read("./time_format.html.erb")).result(binding)) end end
次に結果表示用のerbファイルです。
上記のrubyコードと同じフォルダにtime_format.html.erbという名前で保存してください。
<%= @current_time %> <table border="1"> <tr><th>記号</th><th>サンプル</th><th>説明</th></tr> <% @codes.each do |code| %> <tr> <td>%<%= code[:code] %> </td> <td><%= code[:sample] %> </td> <td><%= code[:context] %> </td> </tr> <% end %> </table>
実行すると、time_format.htmlというファイルが出来たかと思います。
ブラウザで表示するとこんな感じです。
2017-09-15 16:37:51 +0900
記号 | サンプル | 説明 |
---|---|---|
%A | Friday | 曜日の名称(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) |
%a | Fri | 曜日の省略名(Sun, Mon, Tue, Wed, Thu, Fri, Sat) |
%B | September | 月の名称(January, February, March, April, May, June, July, August, September, October, November, December) |
%b | Sep | 月の省略名(Jan, Feb, Mar, Aprm May, Jun, Jul, Aug, Sep, Oct, Nov, Dec) |
%c | Fri Sep 15 16:37:51 2017 | 日付と時刻 |
%d | 15 | 日(01-31) |
%H | 16 | 24時間制の時(00-23) |
%I | 04 | 12時間制の時(01-12) |
%j | 258 | 年中の通算日(001-366) |
%M | 37 | 分(00-59) |
%m | 09 | 月を表す数字(01-12) |
%p | PM | 午前または午後(AM,PM) |
%S | 51 | 秒(00-60) (60はうるう秒) |
%U | 37 | 週を表す数。最初の日曜日が第1週の始まり(00-53) |
%W | 37 | 週を表す数。最初の月曜日が第1週の始まり(00-53) |
%w | 5 | 曜日を表す数。日曜日が0(0-6) |
%X | 16:37:51 | 時刻 |
%x | 09/15/17 | 日付 |
%Y | 2017 | 西暦を表す数 |
%y | 17 | 西暦の下2桁(00-99) |
%Z | JST | タイムゾーン |
%% | % | パーセント文字 |
最後に
スクレイピングたのしいですね。あと標準でerbが入っているところもすばらしいです。
ただ、なぜかwindows上のrubyでは文字コードが上手く変換されず、centos上のrubyで実行しました。
windows上で実行される方は注意が必要です。
読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。