私は(Linux上で実行される)クライアント/サーバーカスタムアプリケーションで作業しており、送信するフレームの1つにタイムスタンプ(つまり、フレームが送信される時間)が含まれています。UTCタイムスタンプの比較
私のアプリケーションを信頼できるものにするために、私はgmtime
を使ってクライアントで時刻を生成しました。私はベルギーにいるので、今はクライアントVMの時間が(夏時間のために)UTC時間より2時間遅れています。
サーバー側では、最初に受信した文字列をtime_t
タイプに変換します。私はdifftime
関数を使用してタイムスタンプが古すぎないかどうかを調べるためにこれを行います。 次に、タイムスタンプ(UTC時刻)をgmtime
で再度生成し、それをtime_t
に変換します。
私は時差を見るために2つのtime_t
を比較します。
私はサーバー側での時間の変換に問題があります。機能(time_str
)のタイムスタンプを生成し、それを文字列にエクスポートする:
クライアント側が...私は、クライアントと同じコードを使用しますが、出力されたgmtime
は異なっている
std::string getTime()
{
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
time (&rawtime); // Get time of the system
timeinfo = gmtime(&rawtime); // Convert it to UTC time
strftime(buffer,80,"%d-%m-%Y %H:%M:%S",timeinfo);
std::string time_str(buffer); // Cast it into a string
cout<<"Time Stamp now (client) : "<<time_str<<endl;
return time_str;
}
そして、それは(9h33現地時間)、これをproduices:
時間S今タンピング:2016年6月4日7時33分30秒
サーバーサイド: fucntion、タイムスタンプを取得newxタイムスタンプを生成し、それらを比較する:
bool checkTimeStamp(std::string TimsStamp_str, double delay)
{
cout<<"TimeStamp recieved: "<<TimsStamp_str<<endl;
/* Construct tm from string */
struct tm TimeStampRecu;
strptime(TimsStamp_str.c_str(), "%d-%m-%Y %I:%M:%S", &TimeStampRecu);
time_t t_old = mktime(&TimeStampRecu);
/* Generate New TimeStamp */
time_t rawtime;
struct tm * timeinfo;
time (&rawtime); // Get time of the system
timeinfo = gmtime(&rawtime); // convert it to UTC time_t
time_t t2 = mktime(timeinfo); // Re-Cast it to timt_t struct
/* Convert it into string (for output) */
char buffer[80];
strftime(buffer,80,"%d-%m-%Y %H:%M:%S",timeinfo);
std::string time_str(buffer); // Cast it into a string
cout<<"Time Stamp now (server) : "<<time_str<<endl;
/* Comparison */
double diffSecs = difftime(t2, t_old);
cout<<diffSecs<<endl;
bool isTimeStampOK;
if (diffSecs < delay)
isTimeStampOK = true;
else
isTimeStampOK = false;
return isTimeStampOK;
}
そして、それは、(ベルギー9h33で)これを生成します。受け取っ
タイムスタンプ:2016年6月4日7時33分30秒
タイムスタンプになりました(サーバー):2016年6月4日午前8時33分31秒
はなぜどちらのlocaltime(9h33)で、どちらもUTC時間のサーバー時間(8h33)(あります7h33)?
私は世代を間違えましたか?私は、クライアント側とまったく同じコードなので、どこにあるのかわかりません...
2つのVMがCentOSを実行している現地時間にあることを忘れていました。 – EisenHeim