使用C语言写一个显示年月日时分秒、毫秒的程序
时间: 2023-09-17 08:11:54 浏览: 271
以下是使用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()函数将时间信息输出到终端。
相关问题
一个能到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;
}
```
C语言程序实现对IRIG-B的解析年月日时分秒毫秒
IRIG-B(Inter Range Instrumentation Group B)是一种标准的时间编码信号,常用于精确时间同步。在C语言中,解析IRIG-B数据通常涉及到从接收到的脉冲序列或二进制串中提取日期和时间信息。以下是一个简单的示例,说明如何处理基本的IRIG-B格式,比如年月日(YYYYMMDDHHMMSS):
```c
#include <stdio.h>
#include <string.h>
// 假设接收到的IRIG-B字符串
char irig_b_string[18];
void parse_IRIG_B(char *irig_b) {
int year = irig_b[0] - '0' * 40; // 通过位移获取四位数年份
int month = (irig_b[1] - '0') * 10 + (irig_b[2] - '0'); // 月份
int day = (irig_b[3] - '0') * 10 + (irig_b[4] - '0');
int hour = (irig_b[5] - '0') * 10 + (irig_b[6] - '0');
int minute = (irig_b[7] - '0') * 10 + (irig_b[8] - '0');
int second = (irig_b[9] - '0') * 10 + (irig_b[10] - '0');
// IRIG-B不包含毫秒部分,这里假设忽略
printf("Date and Time: %04d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);
}
int main() {
strcpy(irig_b_string, "20230301123456"); // 示例 IRIG-B字符串
parse_IRIG_B(irig_b_string);
return 0;
}
```
请注意,实际应用中可能需要考虑更复杂的格式变化,例如包括闰秒、子秒或其他非标准扩展。此外,接收信号并转换成可读的日期时间可能还需要硬件支持或特定库函数。
阅读全文