[英]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.