使用C语言写一个显示年月日时分秒、毫秒的程序
时间: 2023-09-17 14:11:54 浏览: 359
以下是使用C语言编写显示年月日时分秒、毫秒的程序:
```c
#include <stdio.h>
#include <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(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm);
milliseconds = tv.tv_usec / 1000;
printf("Current date and time: %s.%ld\n", time_string, milliseconds);
return 0;
}
```
该程序使用了time.h头文件中的结构体和函数来获取当前的时间信息,包括年月日时分秒和毫秒。其中,gettimeofday()函数可以获取当前时间的秒数和毫秒数,localtime()函数可以将秒数转换为当地时间,strftime()函数可以将时间格式化为字符串。最后通过printf()函数将时间信息输出到终端。
相关问题
linux系统C语言怎样获取带年月日时分秒毫秒的系统时间
在Linux系统下,使用C语言可以借助`struct timeval`结构体以及相关的函数来获取精确到毫秒的时间戳,并结合`struct tm`解析出详细的日期和时间信息。
下面是一个简单的示例:
```c
#include <stdio.h>
#include <time.h>
int main() {
struct timeval tv; // 定义用于存储当前时间和微秒的结构体
if (gettimeofday(&tv, NULL) != 0) { // 获取当前时间
perror("Failed to get time");
return -1;
}
time_t now_time = tv.tv_sec; // 秒数部分
struct tm *local_tm = localtime(&now_time); // 转换为本地时间
printf("%d-%02d-%02d %02d:%02d:%02d.%03ld\n",
local_tm->tm_year + 1900,
local_tm->tm_mon + 1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec,
tv.tv_usec / 1000); // 微妙转换成毫秒
return 0;
}
```
**解释:**
1. `struct timeval`: 包含两个成员变量——`tv_sec`(从纪元开始计算的秒数)`tv_usec`(微妙数),通过`gettimeofday()`函数填充该数据。
2. 使用标准库中的`localtime()`将秒级时间转为更易读的形式(`struct tm`)。
3. 毫秒值由微秒除以1000得到 (`tv.tv_usec / 1000`)。
以上程序输出类似于“YYYY-MM-DD HH:MM:SS.sss”的格式字符串。
一个能到ns的校时服务器发送时间,写一个C语言程序去解析出它的年月日时分秒毫秒纳秒
在C语言中,如果你有一个NS(纳秒级别)精度的校时服务器提供的时间字符串,可以使用标准库函数`strptime()`来解析这种格式。以下是一个基本的例子,假设时间字符串遵循类似这样的格式:"YYYY-MM-DD HH:MM:SS.ssssss":
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_TIME_LEN 32
int main() {
char time_string[MAX_TIME_LEN];
struct tm parsed_time;
// 接收时间字符串
printf("请输入时间(格式: YYYY-MM-DD HH:MM:SS.ssssss): ");
fgets(time_string, sizeof(time_string), stdin);
// 移除末尾的换行符
time_string[strcspn(time_string, "\n")] = '\0';
// 解析时间
if (strptime(time_string, "%Y-%m-%d %H:%M:%S.%f", &parsed_time)) {
time_t t = mktime(&parsed_time); // 将tm结构体转换为时间戳
struct timespec ns_time;
clock_gettime(CLOCK_REALTIME, &ns_time); // 获取当前时间的纳秒级时间
// 计算差值(以纳秒为单位)
long long diff_nsec = ns_time.tv_nsec - parsed_time.tm_nsec;
// 如果负数表示过去的时间,则加一天的纳秒数
if (diff_nsec < 0) {
diff_nsec += 1000000000LL * 60 * 60 * 24; // 一整天的纳秒数
}
printf("解析后的年月日时分秒毫秒纳秒: %d-%02d-%02d %02d:%02d:%02d.%09lld\n",
parsed_time.tm_year + 1900, parsed_time.tm_mon + 1,
parsed_time.tm_mday, parsed_time.tm_hour, parsed_time.tm_min,
parsed_time.tm_sec, diff_nsec);
} else {
printf("无法解析时间字符串!\n");
}
return 0;
}
```
阅读全文
相关推荐














