質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Cisco

シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

Q&A

1回答

1175閲覧

Cisco Meraki18を使いwifi proveしてきた時間を日本時間にしたい

kozica

総合スコア58

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Cisco

シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

0グッド

0クリップ

投稿2018/08/16 07:58

編集2018/08/16 09:07

Cisco Meraki18というWifiのAPを今回使っています
このAPからwifi proveした情報が1〜3分に1回送られるようになってます
そのときに送るデータは下記のようになってます

{ "apMac": <string>, "apTags": [<string, ...], "apFloors": [<string>, ...], "observations": [ { "clientMac": <string>, "ipv4": <string>, "ipv6": <string>, "seenTime": <string>, "seenEpoch": <integer>, "ssid": <string>, "rssi": <integer>, "manufacturer": <string>, "os": <string>, "location": { "lat": <decimal>, "lng": <decimal>, "unc": <decimal>, "x": [<decimal>, ...], "y": [<decimal>, ...] }, },... ] }

このデータの中で"seenTime"の時間が9時間前となってしまっています。
これはどうすればいいでしょうか?
データはJson形式で送られてきます

データの受け取り、テーブルに保存するまで

ruby

1#app/controllers/events_controller.rb 2def create 3 @event = Event.new(data: params[:data].to_s) 4 respond_to do |format| 5 if @event.save 6 format.html { redirect_to @event, notice: 'Event was successfully created.' } 7 format.json { render :show, status: :created, location: @event } 8 else 9 format.html { render :new } 10 format.json { render json: @event.errors, status: :unprocessable_entity } 11 end 12 end 13end 14 15データが送られてきたときの形 16Processing by EventsController#create as HTML 17 Parameters: {"version"=>"2.0", "secret"=>"xxxxxxx", "type"=>"DevicesSeen", 18"data"=>{"apMac"=>"00:18:0a:bb:cc:dd", "apFloors"=>[], "apTags"=>["", "dev", "recently-added", ""], 19 "observations"=>[{"ipv4"=>nil, "location"=>{"lat"=>37.53465, "lng"=>121.41352423000004, 20 "unc"=>49.0, "x"=>[], "y"=>[]}, "seenTime"=>"2018-08-16T08:52:48Z", "ssid"=>nil, "os"=>nil, 21 "clientMac"=>"24:31:4:33:22:11", "seenEpoch"=>1534409568, "rssi"=>5, "ipv6"=>nil, 22 "manufacturer"=>"SHARP"}, {"ipv4"=>nil, "location"............."manufacturer"=>"Intel"}]}}} 23 24 25テーブル保存時のデータ 26{"apMac"=>"00:18:44:33:22:11", "apFloors"=>[], "apTags"=>["", "dev", "recently-added", ""], 27 "observations"=>[{"ipv4"=>nil, "location"=>{"lat"=>37.5, "lng"=>121.413230000004, 28 "unc"=>49.0, "x"=>[], "y"=>[]}, "seenTime"=>"2018-08-16T08:10:54Z", "ssid"=>nil, "os"=>nil, 29"clientMac"=>"da:a4:ca:53:bb:aa", "seenEpoch"=>1534407054, "rssi"=>8, "ipv6"=>nil, "manufacturer"=>"Apple"}, 30 {"ipv4"=>nil, "location".....]}

###試したこと
Merakiダッシュボードでタイムゾーンのを東京に変更
イメージ説明

mysql> show variables like '%time_zone%';
+------------------+------------+
| Variable_name | Value |
+------------------+------------+
| system_time_zone | JST |
| time_zone | Asia/Tokyo |
+------------------+------------+

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

それは、utc時間です。
日本とutc時間の差は9時間ですので、データの形式がわからないのですが、9時間足すと日本時間になります。

投稿2018/08/16 08:14

NaoyaFujita

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozica

2018/08/16 08:16

それは理解できますがどこでそれをすればよいのかがわからないです、、、 やったことを投稿い記載します
NaoyaFujita

2018/08/16 08:25

seenTimeのサンプルデータと、このデータ送信処理を貼ってもらえませんか?
kozica

2018/08/16 08:36

投稿を編集しました 送信処理はちょっとわからないです、、、
NaoyaFujita

2018/08/16 08:42

Railsアプリのタイムゾーンが日本になっていること前提ですが、 createの二行目に @event.data['seenTime'] = Time.parse(@event.data['seenTime']).in_time_zone.strftime("%FT%TZ") と入れるのはどうでしょうか
kozica

2018/08/16 08:58

回答のとおり実行したところ下記エラーが出てしましました Completed 500 Internal Server Error in 21ms (ActiveRecord: 1.0ms) ArgumentError (no time information in "seenTime"): app/controllers/events_controller.rb:52:in `create'
kozica

2018/08/16 09:05 編集

すいません送られてくるときの形式を投稿に追記します テーブルに保存されたものしか書いていませんでした
NaoyaFujita

2018/08/16 09:12 編集

間違えていたので消します
kozica

2018/08/16 09:08

上記をcreateの2行目に入れれば良いですか?
kozica

2018/08/16 09:11

あ、一番上ですね
NaoyaFujita

2018/08/16 09:11

すいません間違えました。これが正しいです。 data = params[:data] data['observations'].each_with_index do |item, i| data['observations'][i]['seenTime'] = Time.parse(item['seenTime']).in_time_zone.strftime("%FT%TZ") end @event = Event.new(data: data.to_s)
kozica

2018/08/16 09:21

SyntaxError ((eval):1: syntax error, unexpected '<', expecting ']' ...added", ""], "observations"=>[<ActionController::Parameters ... ... ^ (eval):1: syntax error, unexpected '{' ...<ActionController::Parameters {"ipv4"=>nil, "location"=>{"la... ... ^ (eval):1: syntax error, unexpected =>, expecting end-of-input ...ontroller::Parameters {"ipv4"=>nil, "location"=>{"lat"=>33.5... ... ^~): (eval):1: syntax error, unexpected '<', expecting ']' (eval):1: syntax error, unexpected '{' (eval):1: syntax error, unexpected =>, expecting end-of-input app/controllers/events_controller.rb:117:in `eval' app/controllers/events_controller.rb:117:in `send_data' 上記エラーが出てしまいました。 しかし保存されたデータの時間は現在時刻に変わってました。 内容見ると "observations"=>[{"ipv4"=>nil, "location"=>{"la となっていたのが "observations"=>[<ActionController::Parameters と変わってテーブルに保存されていました。 そのため、send_dataメソッド実行の際にエラーになったようです。 以前と同じようにテーブルに保存することは可能でしょうか?
NaoyaFujita

2018/08/16 14:28

どうしましょう・・・うーん、ちょっと実際に自分の方でデバッグできれば解決できるのですが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問