ros系统时钟显示北京时间
主要是备份一下显示时间的程序,懒得一直问gpt,而且每次结果都不太一样
在默认情况下,ROS 会使用系统时钟,即从系统的 Epoch(通常是 1970 年 1 月 1 日)开始计算的时间。
UTC(协调世界时,Coordinated Universal Time)是一种标准的时间测量方式,用于协调世界各地的时间。它是基于原子时的,通过使用原子钟等精确的设备来测量时间。
UTC 被设计成与格林尼治标准时间(GMT)保持几乎一致,实际上在大多数情况下二者是相等的。然而,UTC 使用原子钟技术,以确保时间的精确度,并且可以通过加入或删除闰秒来调整与地球自转的差异。
std::time_t t = ros::Time::now().toSec();
std::tm* local_time = std::localtime(&t);//localtime自动使用本地时区
std::string number_str = std::to_string(ros::Time::now().toNSec() / 1000000);
// 取后三个字符
std::string last_three_digits = number_str.substr(number_str.length() - 3);
std::cout << "北京时间:";
std::cout << std::put_time(local_time, "%Y-%m-%d %H:%M:%S") << "."
<< last_three_digits << std::endl;//显示到毫秒
std::tm tm_utc = *std::gmtime(&t);//获取的是UTC时间
tm_utc.tm_hour += 8; //设置为东八区
std::cout << "通过utc时间设置:" << std::endl;
std::cout << std::put_time(&tm_utc, "%Y-%m-%d %H:%M:%S") << std::endl;
相对于UTC,时区可以通过添加或减去一定的小时和分钟来表示。例如,北京时间是 UTC+8,纽约时间是 UTC-5。