我如何在C中获得昨天的日期?

bax*_*rma 3 c date strftime localtime

我想把昨天的日期变成一个格式的字符:YYYYMMDD(没有斜点等).

我使用此代码来获取今天的日期:

time_t now;

struct tm  *ts;  
char yearchar[80]; 

now = time(NULL);  
ts = localtime(&now);

strftime(yearchar, sizeof(yearchar), "%Y%m%d", ts);
Run Code Online (Sandbox Code Playgroud)

我将如何调整此代码,以便生成昨天的日期而不是今天的日期?

非常感谢.

caf*_*caf 8

mktime()函数将规范化struct tm您传递的函数- 所以您需要做的就是:

now = time(NULL);
ts = localtime(&now);
ts->tm_mday--;
mktime(ts); /* Normalise ts */
strftime(yearchar, sizeof(yearchar), "%Y%m%d", ts);
Run Code Online (Sandbox Code Playgroud)

  • @mfloris:这不是真的,因为正如答案中所述,“mktime()”函数将规范化您传递给它的“struct tm”——它将更改代表“2020-02-00”的“struct tm”成代表“2020-01-31”的一个。这就是为什么在“strftime()”之前调用“mktime(ts)”。 (2认同)

Tyl*_*ves 5

如何添加

now = now - (60 * 60 * 24)
Run Code Online (Sandbox Code Playgroud)

在一些非常罕见的极端情况下(例如在闰秒期间)可能会失败但是应该在99.999999%的时间内做你想要的.

  • 这可能会在1970年1月1日发生可怕的破裂,但我认为今天没有任何理由:) (2认同)
  • 在C标准中,`time()`只是以未指定的编码返回时间 - 它的POSIX将其限制为您描述的编码. (2认同)