用于日期时间格式验证的C代码。指定格式为“YYYYMMDDHHMMSSmmmmmm”

时间:2013-04-18 03:16:03

标签: c datetime validation datetime-format

我需要验证“YYYYMMDDHHMMSSmmmmmm”格式的日期时间值。实际上我希望是我需要找出已经过测试的工作C代码来验证上述格式的日期时间值。 此外,我有一个像201304011031000000这样的日期时间值。我需要一个函数来验证这是否是一个有效的日期。[isdatetime()]

以下是格式的各个部分。

YYYY : Year
MM : Month
DD : Day
HH : hour
MM : Minutes
SS : seconds
mmmmmm: micro-seconds

2 个答案:

答案 0 :(得分:1)

如果你在POSIX系统上,这看起来应该用strptime()处理,但'毫秒'(或微秒)部分不由strptime()或任何其他标准处理转换功能我知道。

假设问题是要求微秒,您可以使用以下提供的主题变体:

#include <stdio.h>
#include <string.h>
#include <time.h>

int main(void)
{
    const char  datetime[] = "20130417221633012345"; // YYYYMMDDHHMMSSFFFFFF
    struct tm   time_val;
    unsigned    microsecs;
    const char *end = strptime(datetime, "%Y%m%d%H%M%S", &time_val);
    if (end != 0)
    {
        int nbytes;
        if (strlen(end) == 6 && sscanf(end, "%6u%n", &microsecs, &nbytes) == 1 &&
            nbytes == 6)
        {
            char buffer[32];
            strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &time_val);
            printf("%s = %s.%.6u\n", datetime, buffer, microsecs);
        }
    }
    return 0;
}

修订要求

#include <stdio.h>
#include <string.h>
#include <time.h>

int isdatetime(const char *datetime)
{
    // datetime format is YYYYMMDDHHMMSSFFFFFF
    struct tm   time_val;
    unsigned    microsecs;
    int         nbytes;
    const char *end = strptime(datetime, "%Y%m%d%H%M%S", &time_val);

    if (end != 0 && strlen(end) == 6 &&
        sscanf(end, "%6u%n", &microsecs, &nbytes) == 1 && nbytes == 6)
        return 1;   // Valid
    return 0;       // Invalid
}

答案 1 :(得分:0)

您可以将regex.h用于windowslinux

"YYYYMMDDHHMMSSMSSSSS"类似于:(\d{4}[0,1][0,9]\d{})...您可以找到特定格式here,这取决于您启用2412时钟等等。