簡體   English   中英

24小時時間格式

[英]24 hours time format

我正在讀C程序中的json。 我收到一個這樣的字符串:

Apr 3, 2014 4:44:39 PM

我用strptime解析它以獲得所有這樣的值:

strptime(observationDate, "%b %d, %Y %H:%M:%S %p", &result);

我也試過%r而不是%p 在observationDate中,我有一個包含字符串格式的日期的字符串。 結果是一個struct tm。

但是,即使在第一個字符串中獲取PM,當我嘗試在轉換后打印日期時,我得到4而不是16.I這樣打印,debugLog是一個在文本之前打印系統日期的函數...

debugLog(DEB_INFO, "observationDateConverted: %d-%d-%d %d:%d:%d\n", 
                    result.tm_year+1900, 
                    result.tm_mon + 1, 
                    result.tm_mday, 
                    result.tm_hour, 
                    result.tm_min, 
                    result.tm_sec);

要么使用%r %I:%M:%S %p (注意:這是I沒有H )。

man strptime (由我強調):

%R
12小時制時間(使用區域設置的AM或PM)。 相當於%I的POSIX語言環境中:%M:%S%p

這里吸取了教訓: RTFM!

測試程序:

#define _XOPEN_SOURCE

#include <time.h>

const char d[] = "Apr 3, 2014 4:44:39 PM";

int main(void)
{
  struct tm t = { 0 };

  strptime(d, "%b %d, %Y %I:%M:%S %p", &t);
}

檢查結果:

$gdb ./main
[...]
b 12
r
Breakpoint 1, main () at main.c:12
12  }
(gdb) p t
$2 = {tm_sec = 39, tm_min = 44, tm_hour = 16, tm_mday = 3, tm_mon = 3, tm_year = 114, tm_wday = 4, tm_yday = 92, tm_isdst = 0, __tm_gmtoff = 0, __tm_zone = 0x0}
(gdb) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM