如何在字符串之间插入一个冒号,就像c ++中的日期格式一样?

时间:2016-04-15 22:41:13

标签: c++ string

我在c ++中有字符串20150410 121416

我需要将其转换为20150410 12:14:16

如何在字符串中插入冒号?

2 个答案:

答案 0 :(得分:1)

可以使用strftime在C和C ++中格式化日期/时间。还存在一个非标准但常见的POSIX函数,称为strptime,可用于解析时间。可以使用它们以您的输入格式解析您的日期/时间,然后以您想要的格式将其格式化。

也就是说,假设您不想自己编写解析代码。

如果您有C ++ 11,那么您可以使用此free, open-source date/time library来帮助您使用类似strftime的格式字符串来完成所有这些操作。这样的代码看起来像:

#include "tz.h"
#include <iostream>
#include <sstream>

int
main()
{
    using namespace date;
    std::string input = "20150410 121416";
    std::stringstream stream{input};
    stream.exceptions(std::ios::failbit);
    sys_seconds tp;
    parse(stream, "%Y%m%d %H%M%S", tp);
    auto output = format("%Y%m%d %T", tp);
    std::cout << output << '\n';
}

输出:

20150410 12:14:16

使用日期/时间解析/格式化库的一个优点是,您可以更轻松地更改格式,或在格式转换期间操作日期时间(例如,让它更改时区) )。

例如,下个月规范可能会因您而改变,现在您被告知这是一个代表莫斯科当地时间的时间戳,您需要将其转换为伦敦当地时间并以{{ {1}}。如果你正在使用好的日期/时间库,上面的代码几乎没有变化。

YYYY-MM-DD HH:MM:SS <UTC offset>

但是如果你刚刚开始进行字符串操作,突然之间你就会面临一项重大任务。编写理解日期时间语义的代码&#34; 20150410 121416&#34;是一个重要的飞跃,超越操纵&#34; 20150410 121416&#34;作为一个字符串。

答案 1 :(得分:0)

<script type="text/javascript">
function formatTime(objFormField){
intFieldLength = objFormField.value.length;

if(intFieldLength==2 || intFieldLength == 2){
     objFormField.value = objFormField.value + ":";
     return false;
    } 
}
</script>

Enter time <input type="text" maxlength="5" minlength="5" onKeyPress="formatTime(this)"/>