2011-02-28 22 views
66

私のシステムの現在時刻を取得したいと思います。そのために私はC言語で次のコードを使用しています:Cの現在時刻を取得

time_t now; 
struct tm *mytime = localtime(&now); 
if (strftime(buffer, sizeof buffer, "%X", mytime)) 
{ 
    printf("time1 = \"%s\"\n", buffer); 
} 

問題は、このコードはいくつかのランダムな時間を与えているということです。また、ランダム時間は毎回異なります。私は私のシステムの現在の時間が欲しい。

+0

可能な複製(https://stackoverflow.com/questions/1442116/how-to-get-date-and-time- [Cプログラムでの日付と時刻の値を取得する方法] Cプログラムの価値) –

答えて

92

hereからコピー&ペースト:

/* localtime example */ 
#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 
    printf ("Current local time and date: %s", asctime (timeinfo)); 

    return 0; 
} 

(ただこれはCで動作させるには、メイン()の引数リストに "無効" を追加)

+0

どのようにして他の方法で行うのですか? tmに文字列*? – Goaler444

+5

私はそれはおそらく少し遅れていると知っている可能性がありますが、今では、あなたは['strptime'](http://pubs.opengroup.org/onlinepubs/7908799/xsh/strptime.html)関数を使用する'char *'から 'struct tm'に変換するには、[time.h](http://pubs.opengroup.org/onlinepubs/7908799/xsh/time.h.html)を参照してください。 – KingRadical

+0

asctime()は、 \ n文字列の最後に。 – h7r

55

now変数を初期化します。

time_t now = time(0); // Get the system time 

localtime機能がstruct tmに渡されたtime_tの時間値を変換するために使用され、それが実際にシステム時刻を取得しません。

29

簡単な方法:

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

int main(void) 
{ 
    time_t mytime = time(NULL); 
    char * time_str = ctime(&mytime); 
    time_str[strlen(time_str)-1] = '\0'; 
    printf("Current Time : %s\n", time_str); 

    return 0; 
} 
+1

最後に余分な改行を追加します。 –

+0

@JamesKo True ... – pm89

-3

私は新しい方法でシステム時間を取得しました。しかし、この方法では、整数形式のシステム時間を得ることができます。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fp; 
    char hc1,hc2,mc1,mc2; 
    int hi1,hi2,mi1,mi2,hour,minute; 
    system("echo %time% >time.txt"); 
    fp=fopen("time.txt","r"); 
    if(fp==NULL) 
     exit(1) ; 
    hc1=fgetc(fp); 
    hc2=fgetc(fp); 
    fgetc(fp); 
    mc1=fgetc(fp); 
    mc2=fgetc(fp); 
    fclose(fp); 
    remove("time.txt"); 
    hi1=hc1; 
    hi2=hc2; 
    mi1=mc1; 
    mi2=mc2; 
    hi1-=48; 
    hi2-=48; 
    mi1-=48; 
    mi2-=48; 
    hour=hi1*10+hi2; 
    minute=mi1*10+mi2; 
    printf("Current time is %d:%d\n",hour,minute); 
    return 0; 
} 
+3

Linuxでのタイムライブラリとシステムコールは驚くべきことではありませんが、シェルコマンドに出てパースしようとしなくても、それらを使いたいと思うでしょう。 timeとctimeとrtcのマニュアルページを参照してください。 – Dana

+7

これはひどいです。 –

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

void main() 
{ 
    time_t t; 
    time(&t); 
    clrscr(); 

    printf("Today's date and time : %s",ctime(&t)); 
    getch(); 
} 
+0

純粋なテキストを使用してソリューションのビットを詳しく説明できますか? – Magnilex

+2

'void main()'は 'int main(void)'でなければなりません。 –

6

上記@mingosから答えを拡張するには、私は、特定のフォーマット([DDミリメートルYYYYのHH:MM:SS])に私の時間をフォーマットするには、以下の機能を書きました。

// Store the formatted string of time in the output 
void format_time(char *output){ 
    time_t rawtime; 
    struct tm * timeinfo; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 

    sprintf(output, "[%d %d %d %d:%d:%d]",timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); 
} 

詳しい情報は、およそstruct tmhereを見つけることができます。

+0

これが助けになりました!ありがとうございました。 – hiquetj

4

みんなこの機能を使って現地時間を取得できます。 gmtimeを使いたい場合は、localtimeではなくgmtime関数を使います。歓声

time_t my_time; 
struct tm * timeinfo; 
time (&my_time); 
timeinfo = localtime (&my_time); 
CCLog("year->%d",timeinfo->tm_year+1900); 
CCLog("month->%d",timeinfo->tm_mon+1); 
CCLog("date->%d",timeinfo->tm_mday); 
CCLog("hour->%d",timeinfo->tm_hour); 
CCLog("minutes->%d",timeinfo->tm_min); 
CCLog("seconds->%d",timeinfo->tm_sec); 
6
#include<stdio.h> 
#include<time.h> 

void main() 
{ 
    time_t t; 
    time(&t); 
    printf("\n current time is : %s",ctime(&t)); 
} 
関連する問題