Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串形式的时间(UTC)转换为本地时间_C++_String_Pointers_Visual C++_Time.h - Fatal编程技术网

C++ 将字符串形式的时间(UTC)转换为本地时间

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

我有一个类似于“132233”的时间字符串(只有时间没有日期),我想把它转换成本地时间。 因此,为了使用函数localtime(),我首先使用mktime()将字符串转换为时间,然后使用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;
}
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可以将其转换为时间。