Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++将字符串日期(1/4/2000)转换为int日期(20000104)_C++_String_Date_Data Conversion - Fatal编程技术网

C++将字符串日期(1/4/2000)转换为int日期(20000104)

C++将字符串日期(1/4/2000)转换为int日期(20000104),c++,string,date,data-conversion,C++,String,Date,Data Conversion,我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明轮子。是否有一种更快的,也许是内置的C++方式从这个格式的字符串日期中得到:1/4/2000到更容易使用的int(比如20000104?< p/>> p>标准库函数是,但是不确定C++中的被清理的程度。” 如果您对strtime没有意见,下面是您将如何在案例中使用它: struct tm when; strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check ret

我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明轮子。是否有一种更快的,也许是内置的C++方式从这个格式的字符串日期中得到:1/4/2000到更容易使用的int(比如20000104?< p/>> p>标准库函数是,但是不确定C++中的被清理的程度。” 如果您对strtime没有意见,下面是您将如何在案例中使用它:

struct tm when;

strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;

当然,如果您愿意,可以使用Boost;相关的角似乎是.

标准库函数是,不确定C++中的“干净”,但是

如果您对strtime没有意见,下面是您将如何在案例中使用它:

struct tm when;

strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;

当然,如果您愿意,可以使用Boost;相关的角似乎是.

除非你需要你的内置C++方式来做验证,明显的解析是:

int parseDate(const std::string &input) {
    int month;
    int day;
    int year;
    if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
        // handle error
    } else {
        // check values to avoid int overflow if you can be bothered
        return 10000 * year + 100 * month + day;
    }
}
如果您想编写几行代码类型安全,可以使用流提取器而不是sscanf


标准库中当然没有任何东西可以为您完成10000*年+100*月+日的任务。如果你没有绑定到那个精确的值,你只需要一个正确的整数,那么你可以看看你的平台是否有一个函数告诉你所谓的朱利安日。

< P>除非你需要你的内置C++方式来验证,很明显的解析是:

int parseDate(const std::string &input) {
    int month;
    int day;
    int year;
    if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
        // handle error
    } else {
        // check values to avoid int overflow if you can be bothered
        return 10000 * year + 100 * month + day;
    }
}
如果您想编写几行代码类型安全,可以使用流提取器而不是sscanf


标准库中当然没有任何东西可以为您完成10000*年+100*月+日的任务。如果你不执着于这个精确的值,你只需要一个顺序正确的整数,然后你可以看看你的平台是否有功能告诉你所谓的朱利安日。

a最近被问到。20000104可能很容易比较或排序,但对于任何算术…a最近被问到。20000104可能很容易比较或排序,但对于任何算术…我不熟悉strTime,是否可以提供一个可以处理我的案例的示例,以便我和其他有类似问题的人可以看到它是如何工作的?我认为相关的Boost文档是有用的。POSIX时间假设输入已经是ISO格式,即第一年。StrutTimes具有POSIX的令人兴奋的属性,但不是标准C++或标准C.C++。它有一个名为TimeIGET的区域类别,它解析相同的格式,但我从未使用过它,所以我不能轻易地写出一个例子。tm_year没有正确地获取年份。我不熟悉strtime,是否可以提供一个可以处理我的案例的示例,以便我和其他有类似问题的人可以看到它是如何工作的?我认为相关的Boost文档非常有用。POSIX时间假设输入已经是ISO格式,即第一年。StrutTimes具有POSIX的令人兴奋的属性,但不是标准C++或标准C.C++。它有一个名为TimeIGET的区域类别,它解析相同的格式,但我从未使用过它,所以我不能轻易地写出一个例子。tm_year无法正确获取年份。