初出茅庐的小李博客之RTC时间设置

串口上位机设置RTC时间进行校准

方式1:发送固定格式时间解析

代码:

#include <stdio.h>
#include <string.h>
/*
当在格式字符串中使用 `%*[^:]` 时,它表示在读取输入时跳过冒号 `:` 之前的任何字符。
%*:星号 * 表示读取输入但不将其存储到变量中,而是跳过该部分的内容。
[^:]:方括号 []表示一个字符集,其中 ^ 表示取反。在这个字符集中,我们指定了一个冒号 : 以外的任何字符。
因此,%*[^:] 表示在读取输入时跳过冒号 : 之前的任何字符。这在上述示例中用于跳过字符串中的 "Set Time:" 部分,以便我们只提取日期和时间部分。
这种格式说明符的使用非常方便,可以帮助我们在读取输入时忽略或跳过特定的字符或字符串部分,而不必将其存储到变量中。
*/
int main(void) 
{
    char input[100];  // 假设输入的字符串不超过 100 个字符
    int Year, Month, Day, Hour, Minute, Second;
    
    printf("请输入时间字符串要求样例如下:\r\n");
    printf("Set Time:2023-06-18 23:25:36 \r\n");
    fgets(input, sizeof(input), stdin);
    // 从输入的字符串中提取年、月、日、小时、分钟和秒
    sscanf(input, "%*[^:]:%d-%d-%d %d:%d:%d", &Year, &Month, &Day, &Hour, &Minute, &Second);
  
    printf("Year:   %d\n", Year);
    printf("Month:  %d\n", Month);
    printf("Day:    %d\n", Day);
    printf("Hour:   %d\n", Hour);
    printf("Minute: %d\n", Minute);
    printf("Second: %d\n", Second);
    
    return 0;
}

方式1:测试效果

在这里插入图片描述

方式2:发送设置时间的时间戳

代码:

#include <stdio.h>
#include <string.h>
#include <time.h>
/*时间戳是从特定时间点(例如UNIX纪元时间)开始计算的秒数。时间戳的值通常是一个长整型(long)数值。*/
int main(void) 
{
    char input[100];  // 假设输入的字符串不超过 100 个字符
    int Year, Month, Day, Hour, Minute, Second;
    time_t timestamp;
    printf("请输入时间戳要求样例如下:\r\n");
    printf("Set Time:%ld\r\n",(time_t)time(NULL));
    fgets(input, sizeof(input), stdin);
    // 将时间戳转换为 time_t 类型
    sscanf(input, "Set Time:%ld", &timestamp);
    // 将 time_t 类型的时间戳转换为 struct tm 结构体
    struct tm* timeinfo = localtime(&timestamp);
	Year   = timeinfo->tm_year + 1900;
	Month  = timeinfo->tm_mon  + 1;
    Day    = timeinfo->tm_mday;
    Hour   = timeinfo->tm_hour;
    Minute = timeinfo->tm_min;
    Second = timeinfo->tm_sec;

    printf("Year:   %d\n", Year);
    printf("Month:  %d\n", Month);
    printf("Day:    %d\n", Day);
    printf("Hour:   %d\n", Hour);
    printf("Minute: %d\n", Minute);
    printf("Second: %d\n", Second);
    
    return 0;
}

方式2:测试效果

在这里插入图片描述

有关时间戳的概念大家可以参考之前文章

https://blog.csdn.net/weixin_43176183/article/details/131191018

代码仅仅在Dev平台上测试,具体设置还要在硬件上进行验证!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值