UNIXタイムでコードの実行時間を測定しようとした結果,マイナスの値が出てしまいます.
具体的なシステム構成を以下に述べます.
まず,iPhoneアプリ上でタップした時のタイムスタンプをswiftで取得します.
swiftではマイクロ秒で出てくるため1000をかけてミリ秒に変換します.
swift
1 let today = Date(); 2 let sec = today.timeIntervalSince1970 3 let timestamp = String(UInt64(sec * 1000)) 4 socket.emit("tap", timestamp)
その後,上記のコードにあるようにすぐにnodeで作ったサーバにタイムスタンプを送信し,サーバはPCブラウザにそのデータを送信します.
javascript
1 socket.on("tap", function(msg){ 2 console.log("tap_at: " + msg); 3 io.sockets.emit('server_to_chrome_tap', msg); 4 });
ブラウザがデータを受信した時のタイムスタンプをJavaScriptで取得し,
それらのタイムスタンプを”終了時間ー開始時間”で引き算した結果をブラウザのコンソールに出力します.
javascript
1 socket.on("server_to_chrome_tap", function(dataFromServer) { 2 var startTimeStamp = dataFromServer; 3 end = new Date(); 4 var endTimeStamp = end.getTime(); 5 console.log(startTimeStamp); 6 console.log(endTimeStamp); 7 console.log(endTimeStamp - startTimeStamp); 8 });
以上のコードを実行した結果,70や68など自然数が表示される場合と-1や-3といった負の値が表示される時があります
だいたい半分くらいの割合で負の値になります.
これはUNIX時間の誤差の問題なのでしょうか?
それとも私が書いたコードが悪いのでしょうか?
どちらにせよ,この問題点と解決策を教えていただけると助かります.