如何在数组中存储时间

时间:2016-03-20 15:01:05

标签: c arrays

我还是c的新手。我正在尝试将时间和日期记录到数组中

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

int main(void) {
char prompt, start = 0;
char arr[20];
struct tm *sTm;
time_t now = time(0);
sTm = gmtime(&now);

strftime(arr, sizeof(arr), "%Y-%m-%d %H:%M:%S", sTm);
printf("%s %s\n", arr, "Event occurred now");
printf("Time is %d:%d:%d Date is %d-%d-%d \n", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);
printf("Press and key to exit \n\r");
scanf("\n%c", &prompt);

return 0;
}

简而言之,我想要这一行的值

printf("Time is %d:%d:%d Date is %d-%d-%d \n", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);

在数组如Timeanddate [1] = 14:53:04,20 / 3/2016

2 个答案:

答案 0 :(得分:0)

您可以使用sprintf或snprintf而不是使用printf,这会将输出保存到数组中。但你必须一个接一个地做。

请参阅how to store printf into a variable?以获得更多说明。

答案 1 :(得分:0)

保存单个日期时间字符串不同于将多个日期时间保存到日期时间数组中。

如果要保存一个日期时间,则定义一个字符缓冲区以保存足够的字符在字符串中加上NUL字符。对于HH:MM:SS,dd / mm / yyyy,你需要19个字符加上NUL字符。

char Timeanddate[20];

如果要保存日期时间数组,则需要确定是否需要未知数量的数组元素,因此需要使数组的大小增加,或者您可以假设数组条目数量有限。如果在定义数组之后数组必须增长,那么这在C中就很难了。

对于多个日期时间,您需要一个二维字符数组。假设您知道条目数(比如5个不同的日期/时间),那么定义一个5字符串的数组,每个字符串为20个字节。

char Timeanddate[5][20];

然后你必须在你选择的字符缓冲区中写入datetime的值。您应该使用snprint()而不是sprintf(),因为snprintf()将防止意外地将太多字节写入数组元素,从而溢出缓冲区并导致运行应用程序时出现错误结果。

对于单个日期时间字符串

snprintf(Timeanddate, sizeof(Timeanddate), "%d:%d:%d,%d/%d/%d", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);

对于日期时间字符串数组

snprintf(Timeanddate[0], sizeof(Timeanddate[0]), "%d:%d:%d,%d/%d/%d", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);