获取指定格式的数字时区

Getting numeric timezone in specified format

本文关键字:数字 时区 格式 取指 定格 获取      更新时间:2023-10-16

我想将当前时间打印为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]=':';

我可能忽略了一个更好的解决方案。