我在c ++中有字符串20150410 121416
。
我需要将其转换为20150410 12:14:16
如何在字符串中插入冒号?
答案 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)"/>