Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 用C+格式设置日期+;_C++_Datetime_Formatting - Fatal编程技术网

C++ 用C+格式设置日期+;

C++ 用C+格式设置日期+;,c++,datetime,formatting,C++,Datetime,Formatting,我有一系列日期字符串,格式为:“30-05-2001” 我想将日期解析为天、月、年。现在是一个简单的方法 这样做的目的只是调用函数sscanf。但是我想 探索其他可能性,并通过搜索以下网页 功能。建议使用h: char *strptime(const char *buf, const char *format, struct tm *tm); 有没有人有使用此功能的经验?举个简单的例子 非常有用 谢谢 : #包括 ... struct-tm; 时间; 如果(strtime(“2001年12月

我有一系列日期字符串,格式为:“30-05-2001”

我想将日期解析为天、月、年。现在是一个简单的方法 这样做的目的只是调用函数sscanf。但是我想 探索其他可能性,并通过搜索以下网页 功能。建议使用h:

char *strptime(const char *buf, const char *format, struct tm *tm); 
有没有人有使用此功能的经验?举个简单的例子 非常有用

谢谢

#包括
...
struct-tm;
时间;
如果(strtime(“2001年12月6日12:33:45”,%d%b%Y%H:%M:%S”,&tm)==NULL)
/*处理错误*/;
printf(“年:%d;月:%d;日:%d;\n”,
tm.tm_年、tm.tm_月、tm.tm_日);
printf(“小时:%d;分钟:%d;秒:%d\n”,
tm.tm_小时、tm.tm_分钟、tm.tm_秒);
printf(“周日:%d;年日:%d\n”,tm.tm_wday,tm.tm_yday);
tm.tm_isdst=-1;/*不是由strtime()设置的;告诉mktime()
确定夏令时是否为
有效*/
t=mktime(&tm);
如果(t==-1)
/*处理错误*/;
printf(“自历元起的秒数:%ld\n”,(长)t);"

#包括
...
struct-tm;
时间;
如果(strtime(“2001年12月6日12:33:45”,%d%b%Y%H:%M:%S”,&tm)==NULL)
/*处理错误*/;
printf(“年:%d;月:%d;日:%d;\n”,
tm.tm_年、tm.tm_月、tm.tm_日);
printf(“小时:%d;分钟:%d;秒:%d\n”,
tm.tm_小时、tm.tm_分钟、tm.tm_秒);
printf(“周日:%d;年日:%d\n”,tm.tm_wday,tm.tm_yday);
tm.tm_isdst=-1;/*不是由strtime()设置的;告诉mktime()
确定夏令时是否为
有效*/
t=mktime(&tm);
如果(t==-1)
/*处理错误*/;
printf(“自历元起的秒数:%ld\n”,(长)t)
有关示例,请参阅。还很好地解释了如何使用转换说明符等

编辑:凯曼更快:)

Edit2:链接导致

char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tm);
还有一个关于如何使用的简短示例。 该网站由

开放组基规范 第6期IEEE标准1003.1,2004年版

有关示例,请参见。还很好地解释了如何使用转换说明符等

编辑:凯曼更快:)

Edit2:链接导致

char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tm);
还有一个关于如何使用的简短示例。 该网站由

开放组基规范 第6期IEEE标准1003.1,2004年版


以防您想了解它是如何工作的(没有黑盒)或 如果你需要这些东西(没有函数调用),那么这里有一个 给你的几点建议:

//             0123456789
char date[] = "30-05-2001"; // DD-MM-YYYY
int day, month, year;

day = (date[0] - '0') * 10 + (date[1] - '0');
month = (date[3] - '0') * 10 + (date[4] - '0');
year = (date[6] - '0') * 1000 + (date[7] - '0') * 100 + (date[8] - '0') * 10 + (date[9] - '0');
这(未经测试)的代码是正确的方式来做你想做的事情 只想做你需要做的事(不是更多,不是更多) 较少)。安全、小巧、简单、快速

如果您不确定日期(用户输入),则必须 检查其有效性(或接受与无效者共处的想法
以防您想了解它的工作原理(没有黑盒)或 如果你需要这些东西(没有函数调用),那么这里有一个 给你的几点建议:

//             0123456789
char date[] = "30-05-2001"; // DD-MM-YYYY
int day, month, year;

day = (date[0] - '0') * 10 + (date[1] - '0');
month = (date[3] - '0') * 10 + (date[4] - '0');
year = (date[6] - '0') * 1000 + (date[7] - '0') * 100 + (date[8] - '0') * 10 + (date[9] - '0');
这(未经测试)的代码是正确的方式来做你想做的事情 只想做你需要做的事(不是更多,不是更多) 较少)。安全、小巧、简单、快速

如果您不确定日期(用户输入),则必须 检查其有效性(或接受与无效者共处的想法 申请表中的日期)

如果还想验证虚拟值是否等于
'-'
,则可以对数据执行不同的读取


如果您还想验证虚拟数据等于“代码>”/“代码> >,

<代码> STRPIMTIME()/<代码>不是C++的一部分。@格奥尔:您是对的;但这对Windows等效的格奥尔可能有帮助:你是否更倾向于“不是ISO C++标准库的一部分”,这将更准确。因此,它也不是ISO C标准库的一部分。从可移植性的角度来看,这是一个公平的观点,但既然这是德·普的建议,也许应该反对他的职位?但是,如果目标库提供了它,就可以使用它。建议任何代码都不应使用第三方库或标准库扩展,这将是过于严格的。按照这种逻辑,OS API也将是不受限制的@CLI:我的意思是C++中没有“标准C++”的一部分,就像C++标准一样。好吧,我忽略了OP也有这个。。。你似乎已经纠正了这一点。然而,当发布答案时,我认为应该指出非标准的解决方案,这就是问题的全部——我没有说“不要发布”。@Georg:你似乎误解了我。我理解你的意图,但你的陈述不准确。语言和库是不同的实体。该语言旨在通过使用库进行扩展;它们的使用并不会使代码成为“非标准的”-它将在任何兼容的编译器中编译,而该库是可用的。正如你所说的,警告非便携式用法是有帮助的,但是从你的重复中看来,你不接受语言和库之间的区别,因为你重复同样的错误。<代码> STRPIMTIME()/<代码>不是C++的一部分。@格奥尔:你说得对。但这对Windows等效的格奥尔可能有帮助:你是否更倾向于“不是ISO C++标准库的一部分”,这将更准确。因此,它也不是ISO C标准库的一部分。从可移植性的角度来看,这是一个公平的观点,但既然这是德·普的建议,也许应该反对他的职位?但是,如果目标库提供了它,就可以使用它。建议任何代码都不应使用第三方库或标准库扩展,这将是过于严格的。按照这种逻辑,OS API也将是不受限制的@CLI:我的意思是C++中没有“标准C++”的一部分,就像C++标准一样。好吧,我忽略了OP确实有
std::istringstream buffer("30-05-2001");
int day = 0;
int month = 0;
int year = 0;
char dummy = 0;

buffer >> day >> dummy >> month >> dummy >> year;
// TODO: validate values here