获取指定格式的数字时区
Getting numeric timezone in specified format
我想将当前时间打印为2011-08-18 10:11:12 -07:00
。我编写了如下代码片段
#include <iostream>
using namespace std;
void time_to_string(time_t clock,const char *fmtstr )
{
char buf[256];
if (strftime(buf, 256, fmtstr, localtime(&clock)) == 0)
buf[0] = 0;
cout << buf << endl;
}
int main()
{
time_to_string(time(NULL), "%Y-%m-%d %H%M%S %z");
}
我能够将时间显示为2011-08-18 10:11:12 -0700
而不是2011-08-18 10:11:12 -07:00
。用"%Y-%m-%d %H%M%S %:z"
生成2011-08-18 10:11:12 %:z
如何在C/c++中完成上述任务
您必须手动将%z
格式化的字符串分割为+hhmm
或-hhmm
。%z
有固定的格式。查看strftime的描述。
以ISO 8601:2000标准格式(+hhmm或-hhmm)替换与UTC的偏移量,如果无法确定时区,则不使用字符。
创建一个包含日期和时间的字符串。用%z
与UTC的偏移量构建第二个字符串,在第二个字符串中插入:
。连接第一个和第二个字符串
它试图解释%:并且它不匹配格式说明符,所以它原样打印出来。但是你可能已经知道了=)
在time_to_string函数中,我会在显示它之前手动插入':'到缓冲区中。
您尝试的语法不存在。
我要做的是调用函数两次:一次是"%Y-%m-%d %H%M%S "
,一次是"%z"
,在第二个字符串中手动添加:
,然后将两者连接起来。
要插入:
,您可以做一个难看的缓冲区操作:
buf2[5]=buf2[4];
buf2[4]=buf2[3];
buf2[3]=':';
strcat(buf,buf2);
请注意,布局不太可能为这个特定的数据改变,所以它不是那么难看。
0或者如果真的喜欢过度使用,则使用regexp。但是你需要一个外部库
您可以手动在末尾添加':',修改结果字符串。例如,
buf[26]=' ';
buf[25]=buf[24];
buf[24]=buf[23];
buf[23]=':';
我可能忽略了一个更好的解决方案。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- Log4cpp:以UTC/GMT时区打印日期
- 如何检查一个c++字符串中有多少相同的字符/数字
- 如何以正确的时区从XTS索引中获取数字时间?
- 将日期和时间数字转换为time_t并指定时区
- 获取指定格式的数字时区