11

ISO-8601形式の日付/時刻文字列から に変換する方法を知っている人はいtime_tますか? 私は C++ を使用しており、Windows と Mac で動作する必要があります。

私はコードを書きましたが、より「標準的」なバージョンがあると確信しています。

私は次のような日付を取得し、2011-03-21 20:25その時間が過去か未来かを判断する必要があります。

4

3 に答える 3

8

私が面白いと思った 1 つの醜いハック: どちらの日付/時刻が大きいかだけを判断したいので、日付を文字列に変換して文字列を比較できます。;-) (利点は、どこでも利用できるわけではない strptime が必要ないことです。)

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

int main(int argc, char *argv[])
{
    const char *str = "2011-03-21 20:25";
    char nowbuf[100];
    time_t now = time(0);
    struct tm *nowtm;
    nowtm = localtime(&now);
    strftime(nowbuf, sizeof(nowbuf), "%Y-%m-%d %H:%M", nowtm);
    if (strncmp(str, nowbuf, strlen(str)) >= 0) puts("future"); else puts("past");
    return 0;
}
于 2011-03-21T20:58:13.557 に答える
7

を使用strptimeして文字列から に変換した後、 を使用して からに変換struct tmできます。例えば:mktimestruct tmtime_t

// Error checking omitted for expository purposes
const char *timestr = "2011-03-21 20:25";
struct tm t;
strptime(timestr, "%Y-%m-%d %H:%M", &t);
time_t t2 = mktime(&t);
// Now compare t2 with time(NULL) etc.
于 2011-03-21T20:54:05.510 に答える