鱼C论坛

 找回密码
 立即注册
查看: 1799|回复: 3

[已解决]在linux下C语言编程打印日期时间,格式:2023-10-18 10:41:30.100

[复制链接]
发表于 2023-10-18 10:45:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在Linux下编写一段程序需要记录数据的时间戳,格式:2023-10-18 10:41:30.100

利用标准ansi_c库,我可以输出打印:2023-10-18 10:41:30。但是标准库的日期时间结构体并不涉及到毫秒,网上查了一堆都没有结果,故发帖求助。
最佳答案
2023-10-18 10:47:30
问题回答:

在Linux下,如果你需要以毫秒的精度来记录数据的时间戳,可以使用gettimeofday函数。这个函数可以获取当前的日期和时间,包括毫秒。

下面是一个示例代码,展示了如何使用gettimeofday函数打印日期时间,并包含毫秒:
#include <stdio.h>#include <sys/time.h>int main() {    struct timeval tv;    struct tm* timeinfo;    char buffer[80];    // 获取当前日期和时间    gettimeofday(&tv, NULL);    // 转换为本地时间    timeinfo = localtime(&tv.tv_sec);    // 格式化日期时间字符串,包括毫秒    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);    sprintf(buffer + strlen(buffer), ".%03ld", tv.tv_usec / 1000);    // 打印日期时间字符串    printf("%s\n", buffer);    return 0;}
输出结果类似于:
[/code]
2023-10-18 10:41:30.100
[/code]

在上述代码中,gettimeofday函数用于获取当前的日期和时间,其中tv结构体的tv_sec成员表示秒,tv_usec成员表示微秒。然后,通过localtime函数将时间转换为本地时间,并使用strftime函数将日期和时间格式化为字符串。最后,使用sprintf函数将毫秒部分添加到格式化字符串中,并打印出来。

希望能解答您的疑惑,如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-18 10:46:36 | 显示全部楼层
在C语言中,标准库确实没有直接提供获取毫秒级时间的函数。但是,你可以使用Linux系统调用gettimeofday来获取到微秒级别的时间,然后将其转换为毫秒。以下是一个简单的示例:
#include <stdio.h>
#include <sys/time.h>

int main() {
    struct timeval tv;
    struct tm* ptm;
    char time_string[40];
    long milliseconds;

    // 获取当前的时间
    gettimeofday(&tv, NULL);

    // 将时间转换为本地时间
    ptm = localtime(&tv.tv_sec);

    // 使用strftime函数格式化日期和时间
    strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm);

    // 计算毫秒
    milliseconds = tv.tv_usec / 1000;

    printf("%s.%03ld\
", time_string, milliseconds);

    return 0;
}

这段代码首先使用gettimeofday函数获取当前的时间(包括秒和微秒),然后使用localtime函数将秒数转换为本地时间。然后,使用strftime函数将本地时间格式化为你需要的格式。最后,将微秒转换为毫秒,并打印出完整的日期和时间。

注意,gettimeofday函数在获取时间时可能会受到系统时间调整的影响,如果你需要更精确的时间,可能需要使用其他的方法,例如使用clock_gettime函数。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 10:46:38 | 显示全部楼层
在Linux下,可以使用 strftime 函数来格式化日期和时间。但是,标准库的日期时间结构体 struct tm 并没有包含毫秒的字段。为了打印毫秒,我们可以使用 gettimeofday 函数来获取当前时间的毫秒数,并将其添加到格式化后的日期时间字符串中。

下面是一个示例程序:
#include <stdio.h>
#include <sys/time.h>
#include <time.h>

int main() {
    struct timeval tv;
    struct tm *tm_info;
    char datetime_str[30];

    gettimeofday(&tv, NULL);
    tm_info = localtime(&tv.tv_sec);
    strftime(datetime_str, sizeof(datetime_str), "%Y-%m-%d %H:%M:%S", tm_info);
    sprintf(datetime_str + strlen(datetime_str), ".%03ld", tv.tv_usec / 1000);

    printf("%s\n", datetime_str);

    return 0;
}

在这个示例中,我们首先使用 gettimeofday 函数获取当前时间的秒数和微秒数。然后,使用 localtime 函数将秒数转换为本地时间的结构体 struct tm 。接下来,使用 strftime 函数将日期时间格式化为字符串,并将其存储在 datetime_str 中。最后,使用 sprintf 函数将微秒数添加到字符串的末尾。

编译并运行该程序,将会输出类似于"2023-10-18 10:41:30.100"的日期时间字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 10:47:30 | 显示全部楼层    本楼为最佳答案   
问题回答:

在Linux下,如果你需要以毫秒的精度来记录数据的时间戳,可以使用gettimeofday函数。这个函数可以获取当前的日期和时间,包括毫秒。

下面是一个示例代码,展示了如何使用gettimeofday函数打印日期时间,并包含毫秒:
#include <stdio.h>#include <sys/time.h>int main() {    struct timeval tv;    struct tm* timeinfo;    char buffer[80];    // 获取当前日期和时间    gettimeofday(&tv, NULL);    // 转换为本地时间    timeinfo = localtime(&tv.tv_sec);    // 格式化日期时间字符串,包括毫秒    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);    sprintf(buffer + strlen(buffer), ".%03ld", tv.tv_usec / 1000);    // 打印日期时间字符串    printf("%s\n", buffer);    return 0;}
输出结果类似于:
[/code]
2023-10-18 10:41:30.100
[/code]

在上述代码中,gettimeofday函数用于获取当前的日期和时间,其中tv结构体的tv_sec成员表示秒,tv_usec成员表示微秒。然后,通过localtime函数将时间转换为本地时间,并使用strftime函数将日期和时间格式化为字符串。最后,使用sprintf函数将毫秒部分添加到格式化字符串中,并打印出来。

希望能解答您的疑惑,如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 19:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表