在 C 中使用 strftime,如何将时间格式化为与 Unix 时间戳完全相同的格式?
这是我所追求的时间格式:
2009-10-08 04:31:33.918700000 -0500
我目前正在使用这个:
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
这给出了:
2009-10-11 13:42:57 CDT
这很接近,但不准确。我似乎找不到最后显示 -0500
的任何内容。另外,我将秒作为整数获取。
我该如何解决这两个问题?
Here's the sort of time formatting I'm after:
2009-10-08 04:31:33.918700000 -0500
I'm currently using this:
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
Which gives:
2009-10-11 13:42:57 CDT
Which is close, but not exact. I can't seem to find anything on displaying -0500
at the end. Plus I'm getting the seconds as an int.
How can I resolve these two issues?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我想出了这个:
修复您遇到的问题:
gettimeofday()
和struct timeval
,它有一个微秒成员以获得更高的精度。我尝试通过
gettimeofday()
的第二个struct timezone *
参数手动重新创建时区偏移量,但在我的机器上它返回偏移量 0,这是不正确的。gettimefday()
的 手册页 有关于 Linux(这是我测试的操作系统)下时区的处理有很多话要说。I came up with this:
Fixes for the problems you had:
gettimeofday()
, andstruct timeval
, which has a microseconds member for the higher precision.I tried re-creating the timezone offset manually, through the second
struct timezone *
argument ofgettimeofday()
, but on my machine it returns an offset of 0 which is not correct. The manual page forgettimefday()
has quite a lot to say about the handling of timezones under Linux (which is the OS I tested on).“%Y-%m-%d %T %z”
,但似乎%z
是一个GNU扩展。"%Y-%m-%d %T %z"
, but it seems%z
is a GNU extension.%z(小写 z)。
然而,这并没有出现在 Posix 规范中。 Google 带我转了一圈回到这里。
%z (lower case z).
However, this does not appear in the Posix specification. Google took me in a circle back here.