C/C++中的ctime用法总结

头文件time.h为C语言当中的头文件,被C++继承过来。可以结合chrono进行使用。

如果想要了解chrono格式与ctime格式的转换,或者需要学习chrono时间,可以点击链接进行学习。

1. 时间的数据类型

头文件time.h中,总共有四个时间类型clock_t、size_t、time_t和struct tm。下面分别进行介绍。

(1)struct tm

自1900年至今经过的时间

MemberTypeMeaningRange
tm_secintseconds after the minute0-60*
tm_minintminutes after the hour0-59
tm_hourinthours since midnight0-23
tm_mdayintday of the month1-31
tm_monintmonths since January0-11
tm_yearintyears since 1900
tm_wdayintdays since Sunday0-6
tm_ydayintdays since January 10-365
tm_isdstintDaylight Saving Time flag

(2)clock_t

  • 表示时钟的滴答,可以用ticks 表示。实际是long类型。
  • 1秒的clicks为CLOCKS_PER_SEC个ticks,定义为1000个。

(3)time_t

从1900年1月1日0点UTC时间开始的时间, 实际是一个long类型。单位秒。

(4)size_t

size_t类型很多地方都可以使用,实际上是一个unsigned int类型。

总结:最常用的为struct tm和time_t类型。clock_t可以用于精确计算。

2. 时间转换函数

5个时间转换函数功能如下:

函数说明
asctimetm 转 string
ctimetime_t 转 string
gmtimeUTC时间的time_t 转 tm
localtime本地时间的time_t 转 tm
strftime格式化为string
mktimetm 转time_t

举例说明:

#include <iostream>
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */

int main ()
{
  time_t now;
  time(&now);//获取现在的时间

  tm to_tm = *localtime(&now);//将刚刚获取的时间,转换为tm格式
  time_t to_time_t = mktime(&to_tm);//tm 转time_t;
  std::cout<<"to_time_t: "<<to_time_t<<std::endl;//time_t转tm
  std::cout <<"to_tm: "<<to_tm.tm_year<<std::endl;//从1990年经历了多少年

  std::string thisTime = ctime(&to_time_t);//time_t转string,需要传地址
  std::cout<<thisTime<<std::endl;
  thisTime = asctime(&to_tm);//tm转string
  std::cout<<thisTime<<std::endl;

  return 0;
}

3. 时间操作的函数

有4种处理时间的函数:

(1) time():

  • 获取当地时间,返回time_t类型。
  • 返回的时间为UTC格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒
#include <iostream>
#include <time.h>

int main ()
{
  time_t timer;
  time(&timer);  //或者timer = time(NULL),两种方式获取当地时间
  std::cout << timer <<std::endl;

  return 0;
}

(2) clock()

获取时钟的clicks,返回clock_t类型。

#include <iostream>
#include <time.h>       /* clock_t, clock, CLOCKS_PER_SEC */

int main ()
{
  clock_t t;
  int f;
  t = clock();//获取现在的clicks

  for (int i=0; i<=10000; ++i)
      for (int j=0;j<10000;++j)
  {
      int x = i + j;
  }

  t = clock() - t;//获取ticks差

  std::cout << "Time diff: " << t << " ticks" << std::endl;
  std::cout << "Time diff: " << ((float)t/CLOCKS_PER_SEC) << " s" <<std::endl;

  return 0;
}

(3) difftime()

获取时间差的函数,返回double类型。其实可以直接做减法,如下:

#include <iostream>
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */
#include <string>

int main ()
{
  time_t t1;
  time_t t2;
  struct tm tm1, tm2;
  double seconds;

  time(&t1);//获取现在的时间
  for (int i=0; i<=100000; ++i)
       for (int j=0;j<100000;++j)
   {
       int x = i + j;
   }
  time(&t2);//获取现在的时间

  seconds = difftime(t2,t1);//返回double类型
  int diffTime = t2 - t1;//因为time_t为long类型
  std::cout << "difftime(): " << seconds <<std::endl;
  std::cout << "sub: " << diffTime <<std::endl;

  return 0;
}

参考:http://www.cplusplus.com/reference/ctime/

  • 22
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 很高兴为您服务,答复您的问题:在C,可以使用以下代码随机选出三位数并选取间值:int array[3]; int middle; srand (time(NULL)); for (int i = 0; i < 3; i++) array[i] = rand() % 1000; if (array[1] > array[0] && array[1] < array[2]) middle = array[1]; else if (array[2] > array[0] && array[2] < array[1]) middle = array[2]; else middle = array[0]; ### 回答2: 要在一个数组随机选取三位数并选取其间值,可以按照以下步骤进行: 1. 声明一个整型数组,并给数组赋值,保证数组至少有三个元素。 2. 生成一个随机数,表示在数组的起始位置。在范围内使用 rand() 函数来获取随机数。 3. 按照随机起始位置,从数组选取连续的三个元素。 4. 将这三个元素排序,找到其间值。 5. 打印或返回间值。 下面是一个示例代码: ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { // 声明并初始化数组 int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 设置随机数种子 srand(time(0)); // 生成随机起始位置 int start = rand() % (10 - 3 + 1); // 数组长度减去3加1 // 输出随机起始位置 std::cout << "起始位置:" << start << std::endl; // 选取三个元素并排序 int subArray[3]; for (int i = 0; i < 3; i++) { subArray[i] = array[start + i]; } // 对选取的三个元素进行排序 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2 - i; j++) { if (subArray[j] > subArray[j + 1]) { int temp = subArray[j]; subArray[j] = subArray[j + 1]; subArray[j + 1] = temp; } } } // 输出间值 int middleValue = subArray[1]; std::cout << "间值:" << middleValue << std::endl; return 0; } ``` 这个示例,首先声明了一个大小为10的整型数组,并初始化为1至10的数字。然后使用 srand() 函数设置随机数种子,确保每次运行时得到不同的随机数。接着,使用 rand() 函数生成一个0至7的随机数作为起始位置。然后,从起始位置开始选取连续的三个元素,并使用冒泡排序将这三个元素从小到大排序。最后,输出间值。 ### 回答3: 要在一个数组随机选出三位数并选取间值的代码,可以按照以下步骤进行: 1. 首先,定义一个数组,其包含多个三位数。 - 可以使用数组字面量的方式初始化数组,例如: int[] numbers = {111, 222, 333, 444, 555}; 2. 然后,使用随机数生成器来随机选择一个索引值。 - 可以使用 Random 类来生成随机数,例如: Random rand = new Random(); - 使用 rand.nextInt(numbers.length) 方法来生成一个介于 0 与数组长度之间(不包括数组长度)的随机索引值。 3. 接下来,获取选的三位数。 - 使用生成的索引值作为数组的索引,例如: int selectedNumber = numbers[randomIndex]; 4. 最后,找到选的三位数的间值。 - 将选的三位数转换为字符串,例如: String numberString = String.valueOf(selectedNumber); - 使用 numberString.charAt(1) 来获取间的数字字符。 - 将获取到的间数字字符转换为整数,例如: int middleDigit = Character.getNumericValue(numberString.charAt(1)); 以下是完整的示例代码: ```java import java.util.Random; public class Main { public static void main(String[] args) { int[] numbers = {111, 222, 333, 444, 555}; Random rand = new Random(); int randomIndex = rand.nextInt(numbers.length); int selectedNumber = numbers[randomIndex]; String numberString = String.valueOf(selectedNumber); int middleDigit = Character.getNumericValue(numberString.charAt(1)); System.out.println("选的三位数为:" + selectedNumber); System.out.println("间数字为:" + middleDigit); } } ``` 此代码可以在提供的数组随机选择一个三位数,并打印出选的三位数以及间数字。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值