标签: ctime

在类中初始化静态struct tm

我想在类中使用tm结构作为静态变量.花了一整天阅读和尝试但它仍然无法工作:(如果有人能指出我做错了什么会很感激

在我的班级中,在Public下,我已将其声明为:

static struct tm *dataTime;
Run Code Online (Sandbox Code Playgroud)

在main.cpp中,我试图用系统时间临时定义和初始化它来测试(在运行时输入的实际时间)

time_t rawTime;
time ( &rawTime );
tm Indice::dataTime = localtime(&rawTime);
Run Code Online (Sandbox Code Playgroud)

但似乎我不能使用time()外部函数.

main.cpp:28:错误:在'('标记之前)期望的构造函数,析构函数或类型转换

如何初始化类的静态tm中的值?

c++ static struct class ctime

4
推荐指数
1
解决办法
1万
查看次数

如何从ctime整齐地初始化struct tm

考虑这两种方式从格式化为字符串的日期获取纪元时间:

#include <iostream>

int main() {
    struct tm tm_init = {0};
    strptime("2012-10-26 16:00", "%Y-%m-%dT %H:%M", &tm_init);
    long epoch = mktime(&tm_init);

    struct tm tm_rand;
    strptime("2012-10-26 16:00", "%Y-%m-%dT %H:%M", &tm_rand);
    epoch = mktime(&tm_rand);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

资料来源:http://ideone.com/3xMUm8.本质上,区别在于tm_init初始化为0而tm_rand不是.第一个触发g ++(假设-Wall和-W)说:

test.cpp:4:24: warning: missing initializer for member ‘tm::tm_hour’ [-Wmissing-field-initializers]
Run Code Online (Sandbox Code Playgroud)

以及tm结构中其他字段的类似消息.但是,如果我省略初始化,就像第二种情况一样,valgrind告诉我:

==9892== Conditional jump or move depends on uninitialised value(s)
==9892==    at 0x51E957C: __offtime (offtime.c:40)
==9892==    by 0x51EBBE7: __tz_convert (tzset.c:653)
==9892==    by 0x51E9EDB: __mktime_internal (mktime.c:310)
==9892==    by 0x400786: main (test.cpp:10)
Run Code Online (Sandbox Code Playgroud)

当然,后者比第一个更差,但我也不喜欢警告.当然,我可以通过编写某种tm工厂手动初始化所​​有字段; 但这需要我根据mt的逻辑编写代码,我需要两个写一个工厂(blegh). …

c++ ctime c++11

4
推荐指数
1
解决办法
1万
查看次数

Linux查找mtime和ctime不相等的文件

我可以执行find并列出ctime和mtime不相等的文件吗?

find . -type f -name '*.php' -ctime -5 MISSING_PART
Run Code Online (Sandbox Code Playgroud)

MISSING_PART:类似的东西 -mtime != -ctime

linux shell ctime

4
推荐指数
1
解决办法
788
查看次数

将long int转换为const time_t

我有变量tmit : long tmit;. 我在这段代码中遇到错误:

printf("Time: %s",ctime(&tmit));
Run Code Online (Sandbox Code Playgroud)

并且错误说:Cannot convert 'long int*' to 'const time_t* {aka const long long int*}' for argument '1' to 'char* ctime(const time_t*)' 我的问题是,如果我想看到日期,如何将long转换为time_t而不会丢失任何有关时间的信息或如何更改此代码.我正在研究这个答案,但我得到了错误.

c++ ctime

4
推荐指数
2
解决办法
1万
查看次数

ctime在哪里以及如何分配内存?

我正在使用ctime函数来获取time_t变量的可读表示.ctime声明如下:

char *ctime (const time_t *timer);
Run Code Online (Sandbox Code Playgroud)

你可以看到它返回一个指向结果char数组的指针,而没有在参数中传递任何char指针.因此,我想知道在哪里ctime分配char缓冲区以及谁将销毁它并且不在内部分配内存(malloc当然除了各种各样的内存)被认为是一团糟.

有什么建议?

c++ memory-management ctime

3
推荐指数
1
解决办法
368
查看次数

struct tm的大小

我使用sizeof()运算符在C中打印sizeof(struct tm)它给了我44个字节.但是在ctime的手册页中它有9个int变量用于time.then它的大小应该是36.它如何给出44?

c linux sizeof ctime

3
推荐指数
1
解决办法
1981
查看次数

实时与CPU时间性能指标

我正在尝试通过以毫秒为单位测量实际经过时间与以毫秒为单位的cpu时间来在c ++中执行一些性能度量。这是我的代码的样子:

auto start = std::chrono::high_resolution_clock::now();
unsigned begin = clock();

// some computationally expensive task

auto finish = std::chrono::high_resolution_clock::now();
unsigned end = clock();

(finish - start).count();

int duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
int cpu_duration = 1000*(end - begin)/(CLOCKS_PER_SEC);
Run Code Online (Sandbox Code Playgroud)

现在,我希望cpu时间值低于系统时间,因为线程可能会中断。但是,CPU时间是实时时间的2-3倍。我做错了什么还是我误解了CPU时间的概念?

c++ ctime measure cpu-time c++-chrono

3
推荐指数
1
解决办法
225
查看次数

将ctime转换为unicode,将unicode转换为ctime python

我已将ctime值转换为unicode

1295478503.6789999至'Wed Jan 19 18:08:23 2011'

我可以倒退吗?从第二行到第一行?

python unicode ctime

2
推荐指数
1
解决办法
1038
查看次数

隐式转换双精度到无符号长溢出C++

我正在使用 Clock() 函数测试基于 ctime 库的计时器。请注意,下面的代码仅用于测试目的。

#include <ctime>

unsigned long Elapsed(void);

clock_t start = 0;
clock_t stop = 0;

int main()
{
  start = std::clock();
  while(1)
   {
    sleep(1);
    cout << "Elapsed seconds: " << Elapsed() << endl;
   }
return 0;
}

unsigned long Elapsed()
{
  stop = std::clock();
  clock_t ticks = stop - start;
  double seconds = (double)ticks / CLOCKS_PER_SEC;  //CLOCK_PER_SEC = 1 milion
  return seconds;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当 Elapsed() 返回计算值时,我正在执行从 double 到 unsigned long 的隐式转换。32 位系统的无符号长限制是 2,147,483,647,并且在 Elapsed() 返回 2146 后出现溢出。 …

c++ integer-overflow ctime

2
推荐指数
1
解决办法
708
查看次数

为什么 C struct tm (time.h) 返回错误的月份?

现在是 2020 年 4 月 10 日。我在 C 中创建了这个整数月份到字符串月份的转换器函数。它接受一个整数并返回一个字符串。出于某种原因,它认为现在是March。我调查了问题是我的转换器还是我打印出来的其他东西myTime->tm_mon,它2在它应该返回时3(四月)返回(三月)。谁能找到(我假设是)我的错误并向我指出来?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct tm tm;

void *numberToLetters(int month) {
    char *smonth;
    switch (month) {
    case (0):
        smonth = "January";
        break;
    case (1):
        smonth = "February";
        break;
    case (2):
        smonth = "March";
        break;
    case (3):
        smonth = "April";
        break;
    case (4):
        smonth = "May";
        break;
    case (5):
        smonth = "June";
        break;
    case (6):
        smonth = "July";
        break;
    case (7): …
Run Code Online (Sandbox Code Playgroud)

c time ctime

2
推荐指数
1
解决办法
309
查看次数