C++ 将字符串形式的时间(UTC)转换为本地时间
我有一个类似于“132233”的时间字符串(只有时间没有日期),我想把它转换成本地时间。 因此,为了使用函数localtime(),我首先使用mktime()将字符串转换为时间,然后使用strftime打印转换后的时间,如() 我遇到了一个严重的运行时错误。谁能告诉我出了什么事吗。提前谢谢C++ 将字符串形式的时间(UTC)转换为本地时间,c++,string,pointers,visual-c++,time.h,C++,String,Pointers,Visual C++,Time.h,我有一个类似于“132233”的时间字符串(只有时间没有日期),我想把它转换成本地时间。 因此,为了使用函数localtime(),我首先使用mktime()将字符串转换为时间,然后使用strftime打印转换后的时间,如() 我遇到了一个严重的运行时错误。谁能告诉我出了什么事吗。提前谢谢 int main() { string time_sample="132233"; std::string s_hrs (time_sample.begin(), time_sample.b
int main()
{
string time_sample="132233";
std::string s_hrs (time_sample.begin(), time_sample.begin()+2);
std::string s_mins (time_sample.begin()+2,time_sample.begin()+4);
std::string s_secs (time_sample.begin()+4,time_sample.begin()+6);
int hrs = atoi(s_hrs.c_str());
int mins = atoi(s_mins.c_str());
int secs = atoi(s_secs.c_str());
struct tm time_sample_struct = {0};
time_sample_struct.tm_hour = hrs;
time_sample_struct.tm_min = mins;
time_sample_struct.tm_sec = secs;
time_t converted_time;
converted_time = mktime(&time_sample_struct);
struct tm * timeinfo;
char buffer[80];
timeinfo = localtime(&converted_time);
strftime(buffer,80,"%I:%M:%S",timeinfo);
puts(buffer);
cout<<endl;
getch();
return 0;
}
intmain()
{
字符串时间\u sample=“132233”;
std::字符串s_hrs(time_sample.begin(),time_sample.begin()+2);
std::string s_mins(time_sample.begin()+2,time_sample.begin()+4);
std::字符串s_secs(time_sample.begin()+4,time_sample.begin()+6);
inthrs=atoi(s_hrs.c_str());
int mins=atoi(s_mins.c_str());
int secs=atoi(s_secs.c_str());
struct tm time_sample_struct={0};
时间\样本\结构tm \小时=小时;
时间\样本\结构tm \分钟=分钟;
时间样本结构tm秒=秒;
时间-转换时间;
转换的时间=mktime(&time\u示例结构);
结构tm*时间信息;
字符缓冲区[80];
timeinfo=localtime(转换时间(&U);
strftime(缓冲区,80,“%I:%M:%S”,timeinfo);
放置(缓冲);
cout您的问题是,如果time\u t
是一个32位的值,那么它能够编码的最早日期(给定1970-1-1历元)是1901-12-13
但是,您没有设置tm
结构的日期字段,这意味着它默认为0-0-0
,表示1900-1-0
(因为tm\u-day
是以1为基础的,所以实际上是以一个无效的月份结束的)
由于这不能用32位time\t
表示,mktime
函数出现故障并返回-1
,因此您没有检查这种情况
最简单的解决方法是将tm
结构的日期字段初始化为time\t
可以表示的内容:
time_sample_struct.tm_year = 114;
time_sample_struct.tm_mday = 1;
您对sscanf_s
的调用期望输入值以冒号分隔,而不是冒号分隔。谢谢..我的错,我现在更正了代码..但问题仍然存在:(%d%d%d将不起作用,因为函数将“132233”视为单个数字…对代码进行了大量修改;)..但运行时错误很顽固..我是否正确使用了mktime?尝试使用strtime?这里似乎是正确的解决方案。您可以获得struct tm*tm,使用mktime可以将其转换为时间。