在使用C語(yǔ)言處理JSON字符串時(shí),日期格式通常是一個(gè)很常見(jiàn)的問(wèn)題。如果日期格式中帶有t字母,那就更需要我們進(jìn)行特殊的處理。
例子: { "date": "2021-10-15T07:00:00Z" }
上面的例子中的日期格式就是帶有t的,T代表“Time”,即時(shí)間的開(kāi)始。在進(jìn)行日期格式轉(zhuǎn)換的時(shí)候,我們需要將其轉(zhuǎn)化為UNIX時(shí)間戳,再處理成我們需要的格式。
#include <stdio.h> #include <time.h> #include <string.h> int main() { const char* json_date = "2021-10-15T07:00:00Z"; struct tm tm; memset(&tm, 0, sizeof(struct tm)); strptime(json_date, "%Y-%m-%dT%H:%M:%SZ", &tm); time_t t = mktime(&tm); printf("timestamp: %ld\n", t); // 格式化輸出 char buffer[80]; strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localtime(&t)); printf("formatted date: %s\n", buffer); }
代碼中,我們首先使用strptime函數(shù)解析日期字符串并存儲(chǔ)到tm結(jié)構(gòu)體中,然后通過(guò)mktime函數(shù)將該日期轉(zhuǎn)換為UNIX時(shí)間戳,最后通過(guò)strftime函數(shù)將時(shí)間戳格式化輸出。
此外,在使用日期時(shí)間相關(guān)函數(shù)時(shí),需要注意時(shí)區(qū)的問(wèn)題。JSON字符串中的日期通常是以UTC時(shí)區(qū)進(jìn)行記錄的,因此我們需要在程序中使用相應(yīng)的時(shí)區(qū)進(jìn)行計(jì)算和轉(zhuǎn)換。