我想在类中使用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中的值?
考虑这两种方式从格式化为字符串的日期获取纪元时间:
#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). …
我可以执行find并列出ctime和mtime不相等的文件吗?
find . -type f -name '*.php' -ctime -5 MISSING_PART
Run Code Online (Sandbox Code Playgroud)
MISSING_PART:类似的东西 -mtime != -ctime
我有变量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而不会丢失任何有关时间的信息或如何更改此代码.我正在研究这个答案,但我得到了错误.
我正在使用ctime函数来获取time_t变量的可读表示.ctime声明如下:
char *ctime (const time_t *timer);
Run Code Online (Sandbox Code Playgroud)
你可以看到它返回一个指向结果char数组的指针,而没有在参数中传递任何char指针.因此,我想知道在哪里ctime分配char缓冲区以及谁将销毁它并且不在内部分配内存(malloc当然除了各种各样的内存)被认为是一团糟.
有什么建议?
我使用sizeof()运算符在C中打印sizeof(struct tm)它给了我44个字节.但是在ctime的手册页中它有9个int变量用于time.then它的大小应该是36.它如何给出44?
我正在尝试通过以毫秒为单位测量实际经过时间与以毫秒为单位的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时间的概念?
我已将ctime值转换为unicode
1295478503.6789999至'Wed Jan 19 18:08:23 2011'
我可以倒退吗?从第二行到第一行?
我正在使用 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 后出现溢出。 …
现在是 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)