Tag: 时间

C ++ time_t问题

我在C ++中使用日期管理遇到了麻烦(VS 2008)。 根据MSDN规范 , time_t代表: 自1970年1月1日0:00 UTC以来的秒数 因此,我写了这段代码: #include #include time_t GetDate(int year, int month, int day, int hour, int min, int sec) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = gmtime ( &rawtime ); timeinfo->tm_year = year – 1900; timeinfo->tm_mon = month – 1; timeinfo->tm_mday = day; timeinfo->tm_hour […]

在C中循环获取代码的特定部分的时间

问题描述 下面我有一个程序正在执行两个简单的加法和乘法运算。 然后,我将这两个简单操作的总和存储在两个相应的变量中,称为total1和total2。 在计算方面,total2将花费更多时间来完全执行。 我实现代码的方式,我目前正在计算两个数学运算的整个模拟。 题 是否可以单独计算total1和total 2的最终结果? 我问的是,我希望以单独的方式获得total1和total2的具体时间。 任务目的 我完全清楚长期在内存方面的代价很高,并不是最有效的内存保存方式。 此代码和问题的唯一目的是计时而不是代码优化。 C代码 #include #include int main() { long long total1 = 0, total2 = 0, i = 0; double simulation_time = 0; clock_t Start = clock(); do { total1 += i + i; total2 += i * i * i * i; i++; } […]

如何从struct tm中创建一个人类可读的字符串?

我得到一个struct tm,我想将它转换为具有此特定输出的字符串: dd-mm-yyyy hh:mm 除了月份(mm)之外,一切都是数字,例如: 2010年10月14日10:35 这是我目前的代码: struct stat sb; if (lstat(path, &sb) == 0) { struct tm *pmytm = gmtime(&sb.st_mtime); sprintf(array[index]->mtime, “%d-%d-%d %d:%d”, pmytm->tm_mday, pmytm->tm_mon, 1900 + pmytm->tm_year, pmytm->tm_hour, pmytm->tm_min); 问题是我不知道如何有效地将这个pmytm-> tm_mon转移到月份。 你是否建议我构建一个月的数组并且只是索引到该数组(用我的sprintf中的%s替换%d),或者是否有更好的解决方案? 另外,我有一个小时和分钟的问题。 如果它低于10(2个数字),它将只显示一个数字,如:10:8而不是10:08。 我怎么能解决这个问题? 非常感谢您的帮助, 编辑:作为一个解决方案我想到的是什么(优雅?): static char *months[] = { “”, “Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, […]

rand()在多个函数调用中是一致的

当我尝试从函数调用中生成2个随机数时,我得到重复的结果。 但是, rand()函数在循环中工作正常,或者提供它们不在函数调用之外。 我猜这是因为系统时间和程序很小。 但我不知道如何改变种子。 #include #include #include int test1(){ int randX, randY; int range = 5; srand( time(NULL) ); randX = (rand() % range) + 1; randY = (rand() % 15 ) + 1; printf(“X:%d Y:%d\n”, randX, randY); } int main(){ test1(); test1(); test1(); test1(); test1(); }

time_t最大的有用价值是什么?

找出time_t的有效值范围似乎非常困难。 它在某些平台上是32位,大多数是64位,因此很容易设置为LONG_MAX 。 但是,尝试使用该值并不能正常工作。 例如,您无法将其传递给localtime并将其更改为struct tm 。 一个二进制搜索值的快速​​测试程序告诉我它是67768036191676799.这对应于年末2147483647,所以这是一个有意义的值。 但它是否在任何地方指定,并且是否存在任何合理的,与平台无关的最大可用时间值?

记录编译源的时间

我有一个源文件。 当我编译代码时,我希望可执行文件在构建时记住。 我想知道是否有可能。 例如: int main(){ time_t t = ??? // Time when this line is compiled //print out value of t in certain format. return t }

使用time.h获取C中的当前小时

总新手问题在这里; 我提前道歉。 假设我有一个用C编写的守护进程,它每五分钟左右唤醒一次,如果输入队列中有任何内容,则进行一些处理,然后再回到睡眠状态。 现在假设有一些处理它只需要在某个(可配置的)时间之后 – 例如,下午2点(和午夜之前))。 在C中,将当前时间小时变为int变量的最快,最好的方法是什么,以便可以轻松检查 – 以确定实际上是否在今天下午2点之后?

C代码获取相对于UTC的本地时间偏移(以分钟为单位)?

我没有找到一种简单的方法来获得当地时间和UTC时间之间的分钟数。 起初我打算使用tzset()但它不提供夏令时。 根据手册页,如果日光节省有效,它只是一个不等于零的整数。 虽然通常是一小时,但在某些国家可能需要半小时。 我宁愿避免计算gmtime()返回的当前UTC与localtime()之间的时差。 更通用的解决方案将为我提供指定位置和正time_t值的信息,或至少在本地。 编辑1 :用例是为https://github.com/chmike/timez获取正确的本地时间偏移量。 顺便说一句,如果您认为libc函数操作时间还可以,请阅读https://rachelbythebay.com/w/2013/03/17/time/ 。 编辑2 :迄今为止我用来计算UTC时间偏移的最佳和最简单的解决方案是 // Bogus: assumes DST is always one hour tzset(); int offset = (int)(-timezone / 60 + (daylight ? 60 : 0)); 问题是确定实际的节省时间。 编辑3 :受到@trenki答案的启发 ,我提出了以下解决方案。 这是一个黑客,它欺骗mktime()将gmtime()的输出视为gmtime() 。 当DST更改在UTC时间和本地时间之间的时间跨度时,结果是不准确的。 #include #include int main() { time_t rawtime = time(NULL); struct tm *ptm = gmtime(&rawtime); // […]

为什么gmtime以这种方式实现?

我碰巧发现了Minix的gmtime函数。 我对从纪元以来几天计算年份数的位感兴趣。 以下是这一点的内容: http://www.raspberryginger.com/jbailey/minix/html/gmtime_8c-source.html http://www.raspberryginger.com/jbailey/minix/html/loc__time_8h-source.html #define EPOCH_YR 1970 #define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400))) #define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365) int year = EPOCH_YR; while (dayno >= YEARSIZE(year)) { dayno -= YEARSIZE(year); year++; } 看起来算法是O(n),其中n是距离纪元的距离。 此外,LEAPYEAR似乎必须每年单独计算 – 当前日期数十次,未来日期更多。 我有以下算法做同样的事情(在这种情况下从ISO-9601时代(0年= 1 BC)而不是UNIX时代): #define CYCLE_1 365 #define CYCLE_4 (CYCLE_1 […]

奇怪的mktime逻辑与负秒

我一直在使用mktime / localtime进行时间管理,包括对日期/时间的一些重要算术。 当向mktime提供包含负值的struct tm时,我注意到一些非常奇怪的东西。 请参考下面的代码。 在2013年11月3日,洛杉矶有一个DST更改。如果我指定时间为2013-11-04午夜时间并减去24小时,我得到的值与2013-11-03午夜相同。 它与UTC相差25小时,这很好,因为isdst = -1可以说我们正在看’挂钟时间’。 如果我减去1440分钟(24 * 60)则相同。 但是,如果我减去86400(24 * 60 * 60)秒,我得到2013-11-03凌晨1点。 这是UTC方式的24小时差异。 这是以下代码的输出: 2013-11-03 00:00:00 (gmtoff=0, isdst=-1) -> 2013-11-03 00:00:00 (gmtoff=-25200, isdst=1) -> 1383462000 2013-12–27 00:00:00 (gmtoff=0, isdst=-1) -> 2013-11-03 00:00:00 (gmtoff=-25200, isdst=1) -> 1383462000 2013-11-04 -24:00:00 (gmtoff=0, isdst=-1) -> 2013-11-03 00:00:00 (gmtoff=-25200, isdst=1) -> 1383462000 2013-11-04 00:-1440:00 […]