プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。
いま、現在時刻を取得し、その日付からみて1日前のAM6時へ設定するという処理を作りたいのですが、思うようにできない状態です。
多分、"time(&timer)"で現在時刻を取得し、localtime関数で構造体へ変換してから、値を変更するのだと思うのですが、その部分の処理がうまくできません。
どうかアドバイスをよろしくお願いします。

#include<stdio.h>
#include<time.h>
void main(){

/* ----------- [ 変数の宣言 ]*/

int i;

int sts;
int res;
time_t timer;
time_t ans;
struct tm *t_st;


/* 現在時刻を取得 */
time( &timer );
t_st = localtime(&timer);
t_st->tm_mday - 1; /* ←"コードは意味を持たない"という警告が発生*/
t_st->tm_hour = 6;

timer = mktime(t_st);
t_st = localtime(&timer);

sprintf("%Y/%m/%d %H:%M",
-- 以下略 --
}

A 回答 (2件)

こんな感じでしょうか?



time_t timer = time(NULL);
struct tm t = *localtime(&timer);
t.tm_mday -= 1;
t.tm_hour = 6;
t.tm_min = 0;
t.tm_sec = 0;
mktime(&t);
    • good
    • 0

t_st->tm_mday = t_st->tm_mday - 1;


にすると意味を持ったコードにはなります。
ただ時間の設定というのがどういうことかわかりませんがスレッドセーフではない静的ポインタの内容を書き換えるのはお勧めできません。

(*sprintf( )の第1引数が変です。やりたいのは
char s[256];
strftime(s, 256, "%Y/%m/%d %H:%M", t_st);
では)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!