- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
ctime()函数应该给出自 Epoch 以来传入的秒数的字符串格式时间。这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc, int **argv)
{
time_t tmp=86400; // Seconds for one day
char *s;
s = ctime(&tmp);
if(!s) perror("ctime");
else printf("%s", s);
return 0;
}
该程序在我的 Ubuntu 12.04、32 位机器上给出了正确的输出:
Fri Jan 2 01:00:00 1970
但是相同的代码在我的 Scientific Linux 64 位机器上给出了错误的输出:
Thu Jan 1 16:00:00 1970
显然,根据这台机器Epoch是:
Wed Dec 31 16:00:00 1969
知道为什么 Scientific Linux 6 会给出错误的输出吗?!
最佳答案
time_t
值始终 [1] 表示自纪元以来的秒数,即 1970-01-01 00:00:00 UTC -- 加上或减去确认所需的任何手势我们可能忽略了闰秒。所以 (time_t)86400
代表一个时间点,与您当前所在的时区无关。
ctime()
函数返回一个指针,该指针指向以本地 时间表示的格式不正确的 [2] 字符串。我在 UTC 以西 8 小时,所以在我的系统上你的程序输出是:
Thu Jan 1 16:00:00 1970
(纪元加上您的 86400
的 24 小时,我的时区减去 8 小时)。
可以通过多种方式中的任何一种来确定系统对当前时区的想法。在我的 Ubuntu 系统上,/etc/timezone
包含行 America/Los_Angeles
。在CentOS上,应该类似于Scientific Linux,/etc/localtime
是一个二进制时区数据文件。
在这两个系统上,可以通过设置 $TZ
环境变量来覆盖系统默认时区,使用 UTC
或表示 UTC 的空字符串。如果我将 $TZ
设置为 UTC
或 ""
,您的程序输出为:
Fri Jan 2 00:00:00 1970
时代总是历史上的同一时刻,但可以有不同的表达方式。例如(使用 GNU Coreutils date
命令,显示纪元本身,而不是像您的程序那样显示纪元之后的 24 小时):
$ date -d @0
Wed Dec 31 16:00:00 PST 1969
$ date -u -d @0
Thu Jan 1 00:00:00 UTC 1970
$ TZ=UTC date -d @0
Thu Jan 1 00:00:00 UTC 1970
$ TZ= date -d @0
Thu Jan 1 00:00:00 UTC 1970
$
请注意,如果您在英国,您的本地时间仅在一年中的部分时间与 UTC 匹配。
[1] 好吧,几乎总是如此。 POSIX 保证 time_t
值表示自纪元以来的秒数,但 C 标准仅说明它是一种能够表示时间的算术类型。您可以在 time_t
对象中存储您喜欢的任何值,并根据您的喜好使用它,但是所有处理 time_t
值的标准 C 和 POSIX 函数都会处理它们自纪元以来的秒数。
[2] 由于历史原因,ctime()
和asctime()
生成的格式相当笨拙。它的形式是 Sun Sep 16 01:03:52 1973\n\0
。注意缺少任何时区信息;尾随的 '\n'
也可能令人困惑(因此我在日志文件中看到了无关的空行)。 strftime()
功能给你更多的灵 active 。我建议使用 ISO 8601尽可能格式化。
关于ctime 给出不正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782384/
我对 glibc ctime() 的工作原理有疑问。 按照我的代码片段: #include #include #include int main (int argc,char*
当我使用“ctime”时,curTime 和 pastTime 得到相同的字符串结果,即使 curTime 和 pastTime 的实际值相差 600 秒。 使用 ctime 时如何为两者获得相同的字
我有这个unix时间戳,使用ctime转换后显示为Thu Mar 26 15:30:26 2007,但我只需要Thu Mar 26 2007。 如何更改或截断以消除时间 (HH:MM:SS)? 最佳答
我在文本文件中插入时间时遇到问题。我使用以下代码得到 |21,43,1,3,10,5| Wed Feb 01 20:42:32 2012 这是正常的,但我想做的是将时间放在数字之前,例如 Wed Fe
我已将 ctime 值转换为 unicode 1295478503.6789999到'2011 年 1 月 19 日星期三 18:08:23' 我可以倒退吗?从第二行到第一行? 最佳答案 您需要 Py
ctime()函数应该给出自 Epoch 以来传入的秒数的字符串格式时间。这是我的代码: #include #include #include int main(int argc, int **arg
#include #include #include using namespace std; #define WIDTH 118 #define HEIGHT 60 void clearScr
我在将 ctime 字符串转换为 %Y-%m-%d 格式时遇到问题。 fileobject = "C:\\foo\\bar.txt" filetime = time.ctime(os.path.get
你好, 我有以下代码: int main () { time_t rawtime; time ( &rawtime ); printf ( "The current local time
我正在尝试更改我的 unix 时间戳的格式。但我没有看到任何自定义格式的选项。 这是我的代码: tempstring = "Your last login was: "; time_t lastLog
我正在使用 ctime。但是它总是返回 NULL。所以它以 sprintf 行为核心。它工作得更早。所以不确定为什么会随机返回 NULL? 我有以下代码片段: int main() { cha
如果用户类型time_t定义为__darwin_time_t,在MacOS X中它本身定义为long,为什么会出现下面的代码输出8 时间是(null)?也许这很愚蠢,但我真的无法理解。 #includ
我正在使用 ctime。但是它总是返回空值。所以它以 sprintf 线为核心。它工作得更早。所以不确定为什么它会随机返回 null。 我有以下代码片段: int main() { char avp
这是代码: void i_log_ (int error, const char * file, int line, const char * fmt, ...) { /* Get erro
标准 C ctime 函数是否返回公历日期?特别是,我想验证它是否会考虑闰年,从而显示相应日期的 Feb 29。 最佳答案 对于 future 和最近的时间,是的。对于公历改革之前的时间...我不知道
我有这样一个函数: void ft_display_time(struct timespec ttime) { char *time_long; time_long = cti
我试图让一个循环在 executionTime 指定的准确时间执行。我正在使用 ctime 来获得这个时间,我需要它在几毫秒的精度内(我相信它是)。一旦该循环运行了指定的执行时间,它就会中断。 我的问
我正在寻找 的 C++11 版本图书馆。 C++11 中有这样的东西吗? 编辑:任何具有更多功能的东西都是完美的! 编辑 2:我希望将其与我正在制作的游戏一起使用,以便我可以跟踪玩的总时间。我正在寻
我正在使用 ctime函数来获取 time_t 变量的可读表示。 ctime声明如下: char *ctime (const time_t *timer); 你可以看到它返回了一个指向结果 char
linux下的find命令在目录结构中搜索文件,并执行指定的操作。linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我们来细说一下fin
我是一名优秀的程序员,十分优秀!