使用MS VC ++ 2008在C中实现Ctime()
以运行应用程序时出现了一个问题。
使用ctime
我将获得当前时间格式为 2011年1月9日14:38:09 。有没有办法将上述格式转换为 2012-01-09 14:38:09 (在MYSQL中)。 C中是否有任何直接功能。
有任何建议吗?
答案 0 :(得分:0)
根据man ctime()
:
asctime()和mktime()函数都接受参数 表示分解时间的分解时间 年,月,日等。
我猜你可以使用这些其他功能来做你想做的事。
答案 1 :(得分:0)
C中没有一个。使用mktime(或mktime_r)和sprintf创建自己的时间格式。
答案 2 :(得分:0)
在我看来,处理这个(或任何其他)不匹配的唯一方法是将time()返回的原始值存储在表中;然后让任何应用程序(包括你的应用程序)将该值格式化为它想要向用户显示的任何排列。
这种方法提供了三大胜利:
它利用了通用,简单且记录良好的time_t格式,这意味着您可以放弃数据库,并确保任何人都可以解释和处理它,而无需为您提供进一步的工作/文档。 struct tm和ctime-like格式完全是任意的,三十年前由一些可怜的午夜程序员选择。
任何想要在以前的代码中实现国际化的人,都可以避免当之无愧的蔑视和愤怒。
最重要的是:它以您或其他任何人可以排序/选择的格式存储时间,而其他任何格式都不是这样。
我认为,这是基础,你可以广泛理解你的表格。您可以通过存储raw,time_t值来实现此目标。
答案 3 :(得分:0)
您可以使用localtime()
(或gmtime()
)将time_t
转换为struct tm
,然后使用strftime()
根据需要设置日期格式。< / p>
示例:
char out[20];
time_t t0 = time(0);
struct tm *tm0 = localtime(t0);
strftime(out, sizeof out, "%Y-%m-%d %H:%M:%S", tm0);
如果您需要为不同的数据库列使用不同的time_t
值,请创建它们
然后转换为struct tm
并按上述格式化每个格式
例如:
time_t t0 = time(0); /* now */
time_t t1 = t0 + 3600; /* 1 hour from now */
time_t t2 = t0 + 24*3600; /* 1 day (24 hours) from now */
从评论中发布,以使OP接受答案