2017-01-06 8 views
0

私がしようとしているのは、現在のシステムの日付と時刻を取得し、2つの異なる変数に保存しておき、後で他の日付と時刻。ここに私がこれまで持っていたコードがあります。私は問題は、私は同じシステム時間を取得し続けているコードを実行すると、それは正しくないが、日付が正しいことです。現在の日付と時刻をC言語で2つの異なる変数に変換する

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

int main() { 

time_t raw; 
time(&raw); 

struct tm *time_ptr; 
time_ptr = localtime(&raw); 

char current_date[11]; 
char current_time [20]; 
strftime(current_date, sizeof(current_date), "%m/%d/%Y", time_ptr); 
strftime(current_time, sizeof(current_time), "%H:%I", time_ptr); 

printf("Date Variable is: %s\n", current_date); 
printf("Time Variable is: %s\n", current_time); 

} 
+0

POSIXによると、[ 'のstrftime()']と '%のX '(http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html)を使用してあなたのロケールを与えることに注意してください適切な時刻に '%x'はあなたにロケールに適した日付を与え、'%T'は '%H:%M:%S'と同じものを与えます。 '%m /%d /%y'に相当するY2K準拠の'%D'が何らかの用途であるかどうかはあなた自身で決めることができます。 IMO、それは森の裏に持ち出され、埋葬されるべきです。 OTOH、 '%F'は'%Y-%m-%d'と同じ意味を持ちます。誰もがそれを受け入れるわけではありません - '%x'のスコア1。 –

答えて

1

時間が間違った形式の文字列を使用しています。

%Iフォーマット指定子は、01-12の範囲の時間を示します。したがって、%H:%Iは、時間を2度与えます。最初は24時間形式、次に12時間形式です。

分数が必要な場合は、それぞれ%M%Sを使用する必要があります。

strftime(current_time, sizeof(current_time), "%H:%M:%S", time_ptr); 
1

"%H:%I"間違ったフォーマットで、あなたの代わりに"%H:%M"を必要とする - 分%M指定子で。

は、各変換指定は、適切な文字に置き換えられ

  • 説明したようにC11標準

    7.27.3.5 strftime関数

    #include <time.h> 
        size_t strftime(char * restrict s, 
         size_t maxsize, 
         const char * restrict format, 
         const struct tm * restrict timeptr); 
    
    を参照してください次のリストに記載されています。
  • %のM 10進数(00-59)として分によって置換されます。 [tm_min]

    関連する問題