1

特定の日付以降にメッセージを出力するプログラムを作成しようとしています。アーカイブのようなもの。たとえば、今日は「hello」のみを出力する必要があります。翌日、「世界」が表示されるはずです。しかし、「hello」がすでに出力されるべき日付を過ぎているので、「hello」はまだ出力されているはずです。

基本的な if 条件を使用して localtimed 内の値を比較するだけでこれを実行できると確信していますが、これを行うためstruct tmのより高速で効率的な方法があると思います。if条件メソッドも途方もなく長いコードを使用します。stackoverflow をブラウジングしてみたところ、difftime方法が見つかりました。問題は、difftimeパラメータが

double difftime(time_t time1, time_t time0)

そして、ローカルタイムをそのうちの1つに初期化し、特定の日付をもう1つに初期化する方法がわかりません。

簡単に言うと、私の質問は次のとおりです。

  1. 特定の日付を time_t 変数に設定するにはどうすればよいですか?

  2. time_t 変数をに設定するにはどうlocaltimeすればよいですか (メソッドを使用する場合は、構造体変数を変数に変換して のパラメータに挿入できるようにstruct tm localtime = *localtime(&time_t)する方法を教えてください)。time_tdifftime

4

1 に答える 1

2

不足している成分はmktime()で、これは を にstruct tm戻しtime_tます。

struct tm then;
then.tm_year = 2015 - 1900;
then.tm_mon  = 5 - 1;
then.tm_mday = 11;
then.tm_hour = 8;
then.tm_min  = 45;
then.tm_sec  = 0;
then.tm_dst  = -1;  // Undefined DST vs standard time

time_t now = mktime(&then);

struct tm *inverse = localtime(&now);

構造内の値を調整してmktime()正規化できます。遠い過去の遺物である、年と月の不安定なエンコードに注意してください。

于 2015-05-11T14:36:06.100 に答える