C 中使用 JSON 操作是非常常見的。在 JSON 中,我們通常會遇到時間類型,例如 "2018-07-16 15:36:24",而在 C 中,我們通常使用time_t
類型來表示時間。因此,當我們需要從 JSON 中解析出一個時間字段時,我們需要將其轉換為time_t
類型。
下面是一個使用jansson
庫進行 JSON 解析的例子:
#include <jansson.h>
#include <time.h>
int main()
{
json_t *root;
json_error_t error;
const char *time_str;
time_t time_val;
root = json_loads("{\"time\":\"2018-07-16 15:36:24\"}", 0, &error);
if (!root) {
fprintf(stderr, "error: on line %d: %s\n", error.line, error.text);
return 1;
}
time_str = json_string_value(json_object_get(root, "time"));
struct tm t = {0};
sscanf(time_str, "%d-%d-%d %d:%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday,
&t.tm_hour, &t.tm_min, &t.tm_sec);
t.tm_year -= 1900;
t.tm_mon -= 1;
time_val = mktime(&t); // 轉換為 time_t
json_decref(root);
return 0;
}
在上面的例子中,我們首先加載了一個 JSON 字符串,解析出包含時間字段的 JSON 對象。然后,我們通過json_string_value
函數獲取時間字符串,使用sscanf
函數將其解析為一個tm
結構體,最后使用mktime
函數將其轉換為time_t
類型的時間。
如果我們需要將一個time_t
類型的時間轉換為 JSON 中的時間字符串,我們需要使用strftime
函數。
char time_str[20];
time_t now;
time(&now); // 獲取當前時間
strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", localtime(&now));
printf("%s\n", time_str); // 輸出當前時間
在上面的例子中,我們首先使用time
函數獲取當前時間的time_t
類型值,然后使用strftime
函數將其轉換為字符串。其中,第一個參數是輸出字符串的地址,第二個參數是輸出字符串的大小,第三個參數是輸出的時間格式字符串。注意,輸出字符串的大小應該足夠大,以容納輸出的時間字符串。