Cで現在の時刻を取得する


97

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

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

問題は、このコードがランダムな時間を与えていることです。また、ランダムな時間は毎回異なります。システムの現在の時刻が必要です。


回答:


126

ここからコピー貼り付け:

/* 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で機能させるには、main()引数リストに「void」を追加するだけです)


逆の方法を行う方法はありますか?tm *への文字列?
Goaler444 2013年

6
私はそれがおそらく少し遅れていることを知っています、そしてあなたはおそらくそれまでにそれを理解しているかもしれませんがstrptimetime.hで関数を使用して変換char *しますstruct tm
KingRadical

1
asctime()は文字列の最後に\ nを残すことに注意してください。
h7r 2014年

4
上記のコードは冗長です。asctime(localtime(&rawtime))は、単一のctime(&rawtime)関数呼び出しと同等です。
duleshi 2014年

1
FYI -あなたはしていない必要があるtime_tため、引数としてオブジェクトをtime()。置くNULL0パラメータとして、などと、現在の時刻を返すように動作します。
スーパーキャット

68

now変数を初期化します。

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

このlocaltime関数は、渡さtime_tれたの時刻値をに変換するために使用されstruct tmます。実際にはシステム時刻を取得しません。


35

簡単な方法:

#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
これにより、末尾に余分な改行が追加されます。
ジェームズKo

なしではコンパイルできません#include <string.h>
Deanie

13

上記の@mingosからの回答を拡張するために、以下の関数を記述して、時間を特定の形式([dd mm 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 tmは、こちらをご覧ください


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

void main()
{
    time_t t;
    time(&t);
    printf("\n current time is : %s",ctime(&t));
}

6

この関数を使用して現在の現地時間を取得できます。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);

2

日付なしで時間だけが必要な場合。

  time_t rawtime;
  struct tm * timeinfo;
  time( &rawtime );
  timeinfo = localtime( &rawtime );
  printf("%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, 
    timeinfo->tm_sec);

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();
}

純粋なテキストを使用してソリューションについて少し詳しく説明してもらえますか?
Magnilex、2015年

2
void main()する必要がありますint main(void)
キーストンプソン

-9

私はシステム時間を取得する新しい方法を得ました。その長くてばかげた仕事でいっぱいですが、このようにして整数形式でシステム時間を得ることができます。

#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;
}

7
Linuxのタイムライブラリとシステムコールは驚くべきものではありませんが、それでも、それらを使用したい場合は、シェルコマンドに出向いて解析しようとしないでください。time、ctime、およびrtcについては、manページを参照してください。
ダナ2014年

18
これは酷い。
Manuel Reis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.