0

以下のメソッドを使用して日付を検証しています。文字列で月をフォーマットする方法は?

bool CDateTime :: IsValidDate(char* pcDate) //pcDate = 25-Jul-2012 15:08:23
{
    bool bVal = true;
    int iRet = 0;
    struct tm tmNewTime;   

    iRet = sscanf_s(pcDate, "%d-%d-%d %d:%d:%d", &tmNewTime.tm_mon, &tmNewTime.tm_mday, &tmNewTime.tm_year, &tmNewTime.tm_hour, &tmNewTime.tm_min, &tmNewTime.tm_sec);
    if (iRet == -1)
        bVal = false;

    if (bVal == true)
    {
        tmNewTime.tm_year -= 1900;
        tmNewTime.tm_mon -= 1;
        bVal = IsValidTm(&tmNewTime);
    }
    return bVal;

}
4

2 に答える 2

1

strptime の使用:

#include <time.h>
char *str = "25-Jul-2012 15:08:23";
struct tm tm;
if (strptime (str, "%d-%b-%Y %H:%M:%S", &tm) == NULL) {
   /* Bad format !! */
}
于 2012-07-25T06:25:38.670 に答える
-1

これを行う C++11 の方法は次のとおりです。

#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>

int main()
{
    auto now = std::chrono::system_clock::now();
    auto now_c = std::chrono::system_clock::to_time_t(now);

    std::cout << "Now is " << std::put_time(std::localtime(&now_c), "%d-%b-%Y %H:%M:%S") << '\n';
}

注:ストリーム I/O マニピュレータstd::put_timeは、まだすべてのコンパイラで完全に実装されているわけではありません。たとえば、GCC 4.7.1 にはありません。

于 2012-07-25T06:36:05.310 に答える