4

私は自分の答えをstackoverflowサイトでチェックしましたが、得られなかったので、ここに投稿しています。

私の問題は次のとおりです。

フォーマットで2つのタイムスタンプを比較する方法は"Month Date hh:mm:ss"?

私は C と C++ でプログラムを書いていますが、時間は表示可能な文字列形式です。

例 :

time1 = "Mar 21 11:51:20"
time2 = "Mar 21 10:20:05"

time1 と tme2 を比較して、time2かどうかを調べたいので、以下のよう にorとして出力する必要があります。 time1truefalse

 if time2 > time1 then 
       i need output as 1 
 or 
       0 or -1 anything

を使用しましたが、との間difftime(time2,time1)のデルタ時間を返します。 大きいかどうかを確認したい。 difftime1time2

ご不明な点がございましたら、事前に感謝します

4

3 に答える 3

7

まず、 difftime を使用して比較します。

関数を使用difftime()して、時間と戻り値を比較する1-1、次のようにします。

int comparetime(time_t time1,time_t time2){
 return difftime(time1,time2) > 0.0 ? 1 : -1; 
} 

SECOND- 文字列を時間に変換:

構造体への変換 が難しい場合は、次の 2 つの関数string time_t続けて使用できます。

  1. char *strptime(const char *buf, const char *format, struct tm *tm);関数。文字列をに変換するstruct tm

    例: 日時文字列を変換する"Mar 21 11:51:20 AM"には、次のstruct tm3 つの書式文字列が必要です。

    %b : 月の名前。完全な名前または省略形のいずれかです。
    %d : 月の日 [1–31]。
    %r : ロケールの AM/PM 形式の時刻。ロケールの時間形式で利用できない場合は、デフォルトで POSIX 時間の AM/PM 形式: %I:%M:%S %p.

  2. time_t mktime (struct tm * timeptr);に変換するstruct tm*関数time_t

以下は私のサンプルプログラムです:

#include <stdio.h>
#include <time.h>
int main(void){
    time_t t1, t2;
    struct tm *timeptr,tm1, tm2;
    char* time1 = "Mar 21 11:51:20 AM";
    char* time2 = "Mar 21 10:20:05 AM";

    //(1) convert `String to tm`:  
    if(strptime(time1, "%b %d %r",&tm1) == NULL)
            printf("\nstrptime failed\n");          
    if(strptime(time2, "%b %d %r",&tm2) == NULL)
            printf("\nstrptime failed\n");

    //(2)   convert `tm to time_t`:    
    t1 = mktime(&tm1);
    t2 = mktime(&tm2);  

     printf("\n t1 > t2 : %d", comparetime(t1, t2));
     printf("\n t2 > t1 : %d", comparetime(t2, t1));
     printf("\n");
     return 1;
}

そして、それはあなたが望むように機能します:

 $ ./a.out 
 t1 > t2 : 1
 t2 > t1 : -1

読み取った 2 つの日付の差を計算するには: C で時間単位の 2 つの日付の差をどのように見つけますか?

于 2013-03-21T19:29:19.890 に答える
2

見るstrptime()

ASCII 文字列でフォーマットされた日付/時刻をstruct tm

于 2013-03-21T19:37:39.003 に答える