从时间戳中提取时间

时间:2014-11-13 17:22:05

标签: c timestamp substring iso8601

我正在尝试从ISO8601时间戳中提取时间段。

e.g。从以下timstamp "0001-01-01T17:45:33"我想提取此部分"17:45:33"

1 个答案:

答案 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时间戳。然后我会使用第二种方法。