【发布时间】:2014-12-10 07:12:39
【问题描述】:
我有一个像“132233”这样的时间字符串(只有时间没有日期),我想把它转换成当地时间。 因此,为了使用函数 localtime(),我首先使用 mktime() 将我的字符串转换为 time_t(感谢How to convert a string variable containing time to time_t type in c++?),然后使用 strftime 打印转换后的时间,如 (http://www.cplusplus.com/reference/ctime/strftime/) 所示 我遇到了一个严重的运行时错误。任何人都可以告诉我什么是错的。提前致谢
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;
}
【问题讨论】:
-
您对
sscanf_s的调用要求输入值以冒号分隔,而实际上不是。 -
谢谢..我的错,我现在更正了代码..但是问题仍然存在:(
-
%d%d%d 不起作用,因为该函数会将“132233”视为单个数字...
-
对代码进行了相当多的修改;)..但是运行时错误很顽固..我正确使用了 mktime 吗?
-
尝试使用 strptime?这里似乎是正确的解决方案。你得到 struct tm *tm,使用 mktime 你可以把它转换成 time_t。
标签: c++ string pointers visual-c++ time.h