我正在尝试从ISO8601时间戳中提取时间段。
e.g。从以下timstamp "0001-01-01T17:45:33"
我想提取此部分"17:45:33"
。
答案 0 :(得分:2)
你有几个选择。
假设您在名为string
的变量char数组中使用它。
现在,如果您知道时间总是在字符串的末尾,那么您可以轻松完成:
#define TIMEWIDTH 8
#include <stdio.h>
#include <string.h>
int main() {
const char string[] = {"0001-01-01T17:45:33\0"};
unsigned int strlength = strlen(string);
char temp[TIMEWIDTH + 1]; // add one for null character
printf("%s\n", string);
strncpy(temp, string + strlength - TIMEWIDTH, TIMEWIDTH + 1); // another + 1 for the null char
printf("%s\n", temp);
}
如果它更复杂,你必须做更多的分析才能找到它。手动或使用不同的可用工具,如sscanf()
或其他。确保指定sscanfs()
的宽度。
http://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm
如果T
表示您可以使用strchr查找它的开始时间:
#include <stdio.h>
#include <string.h>
int main() {
const char string[] = {"0001-01-01T17:45:33\0"};
char *temp;
temp = strchr(string, 'T') + 1;
printf("%s\n", temp);
}
这实际上取决于输入的变量...如果它只是一个单一的例子,你可以使用其中任何一个。尽管最后一个更有效率。
您表示它是ISO 8601时间戳。然后我会使用第二种方法。