秒、微秒及相关函数

在C语言中,纳秒(ns)、微秒(us)、毫秒(ms)、秒(s)是时间单位,它们之间的关系如下:

1秒 = 1000毫秒(ms)
1毫秒 = 1000微秒(us)
1微秒 = 1000纳秒(ns)

也就是说,1秒等于1000毫秒,1毫秒等于1000微秒,1微秒等于1000纳秒。因此,可以通过上述关系来进行时间单位的转换。

在C语言中,可以使用以下系统函数来处理时间单位的转换:

1. clock():返回程序执行起(一般为程序的开头),处理器时钟所使用的时间,单位为毫秒(ms)。

2. difftime():计算两个time_t类型时间之间的差值,单位为秒(s)。

3. gettimeofday():获取当前时间和时区信息。

4. sleep():让程序暂停指定的时间,单位为秒(s)。

5. usleep():让程序暂停指定的时间,单位为微秒(us)。

6. nanosleep():让程序暂停指定的时间,单位为纳秒(ns)。

7. time():获取当前时间的时间戳,单位为秒(s)。

8. gmtime():将时间戳转换为UTC时间。

9. localtime():将时间戳转换为本地时间。

10. strftime():将时间转换为指定格式的字符串。

下面给出一些使用示例:

1. clock():

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

int main() {
    clock_t start, end;
    double cpu_time_used;

    start = clock(); // 记录开始时间

    // 执行一些任务
    int i, sum = 0;
    for (i = 1; i <= 100000; i++) {
        sum += i;
    }

    end = clock(); // 记录结束时间
    cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC; // 计算CPU使用时间

    printf("CPU使用时间为: %f秒\n", cpu_time_used);

    return 0;
}


```

输出结果为:

```
CPU使用时间为: 0.000003秒
```

2. difftime():

```c

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

int main() {
    time_t start, end;
    double diff;

    time(&start); // 记录开始时间

    // 执行一些任务
    int i, sum = 0;
    for (i = 1; i <= 100000; i++) {
        sum += i;
    }

    time(&end); // 记录结束时间
    diff = difftime(end, start); // 计算时间差

    printf("时间差为: %f秒\n", diff);

    return 0;
}


```

输出结果为:

```
时间差为: 0.000000秒
```

3. gettimeofday():

```c

#include <stdio.h>
#include <sys/time.h>

int main() {
    struct timeval tv;
    gettimeofday(&tv, NULL); // 获取当前时间

    printf("当前时间为: %ld秒 %ld微秒\n", tv.tv_sec, tv.tv_usec);

    return 0;
}


```

输出结果为:

```
当前时间为: 1638397783秒 439380微秒
```

4. sleep()

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("程序开始执行...\n");
    sleep(2); // 暂停2秒
    printf("程序执行结束。\n");

    return 0;
}


```

输出结果为:

```
程序开始执行...
程序执行结束。
```

5. usleep():

```c

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("程序开始执行...\n");
    usleep(2000000); // 暂停2秒
    printf("程序执行结束。\n");

    return 0;
}


```

输出结果为:

```
程序开始执行...
程序执行结束。
```

6. nanosleep():

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

int main() {
    struct timespec ts;
    ts.tv_sec = 2; // 暂停2秒
    ts.tv_nsec = 0;

    printf("程序开始执行...\n");
    nanosleep(&ts, NULL);
    printf("程序执行结束。\n");

    return 0;
}


```

输出结果为:

```
程序开始执行...
程序执行结束。
```

7. time():

```c

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

int main() {
    time_t t;
    time(&t); // 获取当前时间戳

    printf("当前时间戳为: %ld\n", t);

    return 0;
}


```

输出结果为:

```
当前时间戳为: 1638397783
```

8. gmtime():

```c

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

int main() {
    time_t t;
    struct tm *gmt;

    time(&t); // 获取当前时间戳
    gmt = gmtime(&t); // 转换为UTC时间

    printf("UTC时间为: %d年%d月%d日 %d:%d:%d\n",
           1900 + gmt->tm_year, gmt->tm_mon + 1, gmt->tm_mday,
           gmt->tm_hour, gmt->tm_min, gmt->tm_sec);

    return 0;
}


```

输出结果为:

```
UTC时间为: 2021年12月1日 6:29:43
```

9. localtime():

```c

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

int main() {
    time_t t;
    struct tm *local;

    time(&t); // 获取当前时间戳
    local = localtime(&t); // 转换为本地时间

    printf("本地时间为: %d年%d月%d日 %d:%d:%d\n",
           1900 + local->tm_year, local->tm_mon + 1, local->tm_mday,
           local->tm_hour, local->tm_min, local->tm_sec);

    return 0;
}


```

输出结果为:

```
本地时间为: 2021年12月1日 14:29:43
```

10. strftime():

```c

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

int main() {
    time_t t;
    struct tm *local;
    char str[100];

    time(&t); // 获取当前时间戳
    local = localtime(&t); // 转换为本地时间

    strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", local); // 转换为指定格式的字符串

    printf("当前时间为: %s\n", str);

    return 0;
}


```

输出结果为:

```
当前时间为: 2021-12-01 14:29:43
```

需要注意的是,不同系统中可能会有一些函数的实现不同,因此在使用时需要查看对应的文档。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值