WEEKDAY_GET

FUNCTION WEEKDAY_GET.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(LANGUAGE) LIKE  SY-LANGU DEFAULT SY-LANGU
*"       EXPORTING
*"             VALUE(RETURN_CODE) LIKE  SY-SUBRC
*"       TABLES
*"              WEEKDAY STRUCTURE  T246
*"       EXCEPTIONS
*"              WEEKDAY_NOT_FOUND
*"----------------------------------------------------------------------

函数模块作用:
从数据表中获得指定语言每周七天的名称,例如中文就是星期一、星期二……星期日,英文就是Sunday、Monday……Saturday。

输入参数:
LANGUAGE:指定语言代码,可以省略,如果不填就是当前登录语言。注意,在调用时如果指定某种特定语言,必须用一个字节的语言代码,例如中文是 1、英文是 E……,而不能用 ZH、EN,语言代码参见表 T002。

输出参数:
RETURN_CODE:返回码,查询数据库获得的返回码。但是由于这个函数会抛出异常,因此返回码的作用不大。

表:
WEEKDAY:结构与透明表 T246 相同,用来存储返回给用户的周日名称。

异常:
WEEKDAY_NOT_FOUND:没有找到周日的描述。
/* * module_utc.c * * Created on: Apr 1, 2025 * Author: XWM */ #include <module/module_utc/module_utc.h> #include <driver/driver_utc/driver_utc.h> static timer_alarm_t timer_alarm = {0}; /* * 函数名 :timer_alarm_get * 功能 :闹钟相关参数获取 * 参数 :无 * 返回值 :参考结构体timer_alarm_t * 备注 :无 */ timer_alarm_t timer_alarm_get(void) { return timer_alarm; } /* * 函数名 :timer_alarm_reset * 功能 :闹钟重置 * 参数 :无 * 返回值 :无 * 备注 :无 */ void timer_alarm_reset(void) { timer_alarm.is_set = false; timer_alarm.is_happen = false; } /* * 函数名 :timer_alarm_happen_clear * 功能 :闹钟事件清除 * 参数 :无 * 返回值 :无 * 备注 :无 */ void timer_alarm_happen_clear(void) { timer_alarm.is_happen = false; } /* * 函数名 :timer_alarm_set * 功能 :闹钟设置 * 参数 :weekday星期 * :hour时 * :minute分 * :second秒 * 返回值 :无 * 备注 :无 */ void timer_alarm_set(uint8_t weekday, uint8_t hour, uint8_t minute, uint8_t second) { /* 格式错误 */ if((weekday < RTC_WEEKDAY_MONDAY || weekday > RTC_WEEKDAY_SUNDAY) || hour > 24 || minute > 60 || second > 60 ) { return; } timer_alarm_a_set(weekday, hour, minute, second); timer_alarm.is_set = true; } /* * 函数名 :weekday_local_to_rtc * 功能 :本地周转RTC周 * 参数 :weekday本地周 * 返回值 :rtc周 一周的开始是周一 * 备注 :无 */ uint8_t weekday_local_to_rtc(uint8_t weekday) { switch(weekday) { case LOCAL_WEEKDAY_MONDAY: { return RTC_WEEKDAY_MONDAY; } case LOCAL_WEEKDAY_TUESADAY: { return RTC_WEEKDAY_TUESDAY; } case LOCAL_WEEKDAY_WEDNESDAY: { return RTC_WEEKDAY_WEDNESDAY; } case LOCAL_WEEKDAY_THURSDAY: { return RTC_WEEKDAY_THURSDAY; } case LOCAL_WEEKDAY_FIRDAY: { return RTC_WEEKDAY_FRIDAY; } case LOCAL_WEEKDAY_SATURDAY: { return RTC_WEEKDAY_SATURDAY; } case LOCAL_WEEKDAY_SUNDAY: { return RTC_WEEKDAY_SUNDAY; } default: { return LOCAL_WEEKDAY_UNKNOW; } } } /* * 函数名 :weekday_rtc_to_local * 功能 :rtc周转本地周 * 参数 :weekday本地周 * 返回值 :本地周(一周的开始是周日) 参考枚举体task_weekday_e * 备注 :无 */ local_weekday_e weekday_rtc_to_local(uint8_t weekday) { switch(weekday) { case RTC_WEEKDAY_MONDAY: { return LOCAL_WEEKDAY_MONDAY; } case RTC_WEEKDAY_TUESDAY: { return LOCAL_WEEKDAY_TUESADAY; } case RTC_WEEKDAY_WEDNESDAY: { return LOCAL_WEEKDAY_WEDNESDAY; } case RTC_WEEKDAY_THURSDAY: { return LOCAL_WEEKDAY_THURSDAY; } case RTC_WEEKDAY_FRIDAY: { return LOCAL_WEEKDAY_FIRDAY; } case RTC_WEEKDAY_SATURDAY: { return LOCAL_WEEKDAY_SATURDAY; } case RTC_WEEKDAY_SUNDAY: { return LOCAL_WEEKDAY_SUNDAY; } default: { return LOCAL_WEEKDAY_UNKNOW; } } } /* * 函数名 :utc_second_get * 功能 :utc秒数获取 * 参数 :无 * 返回值 :从1970至今的秒数 * 备注 :无 */ uint64_t utc_second_get(void) { utc_t utc = utc_data_timer_get(); uint16_t year = utc.date.year; uint8_t month = utc.date.month; uint8_t date = utc.date.date; uint8_t hour = utc.time.hour; uint8_t minute = utc.time.minute; uint8_t second = utc.time.second; /* 将年份从1970年开始累加,再加上每个月的天数累加,以及一些闰年的处理 */ uint64_t seconds = ((uint64_t)year - 1970) * 365 * 24 * 60 * 60; for(uint16_t i = 1970; i < year; i++) { if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) { /* 闰年额外的一天 */ seconds += 24 * 60 * 60; } } /* 累加月份 */ const uint8_t monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for(uint8_t i = 0; i < month-1; i++) { seconds += monthDays[i] * 24 * 60 * 60; } /* 如果是闰年且累加到2月份,需要额外一天 */ if((year % 4== 0 && year % 100 != 0) || (year % 400 == 0)) { if(month > 2) { seconds += 24 * 60 * 60; } } /* 累加天数 */ seconds += (date - 1) * 24 * 60 * 60; /* 累加小时数 */ seconds += (hour) * 60 * 60; /* 累加分钟数 */ seconds += (minute)*60; /* 累加秒数 */ seconds += second; return seconds; } /* * 函数名 :utc_stamp_to_second * 功能 :时间戳换算成秒 * 参数 :date_time日期和时间 例20250401184500年月日时分秒 * 返回值 :从1970至今的秒数 * 备注 :无 */ uint64_t utc_stamp_to_second(double date_time) { uint16_t year = (uint16_t)((uint64_t)date_time / 10000000000); uint8_t month = (uint8_t)((uint64_t)date_time % 10000000000 / 100000000); uint8_t date = (uint8_t)((uint64_t)date_time % 100000000 / 1000000); uint8_t hour =(uint8_t)((uint64_t)date_time % 1000000 / 10000); uint8_t minute =(uint8_t)((uint64_t)date_time % 10000 / 100); uint8_t second =(uint8_t)((uint64_t)date_time % 100); /* 将年份从1970年开始累加,再加上每个月的天数累加,以及一些闰年的处理 */ uint64_t seconds = ((uint64_t)year - 1970) * 365 * 24 * 60 * 60; for(uint16_t i = 1970; i < year; i++) { if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) { /* 闰年额外的一天 */ seconds += 24 * 60 * 60; } } /* 累加月份 */ const uint8_t monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for(uint8_t i = 0; i < month - 1; i++) { seconds += monthDays[i] * 24 * 60 * 60; } /* 如果是闰年且累加到2月份,需要额外一天 */ if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { if(month > 2) { seconds += 24 * 60 * 60; } } /* 累加天数 */ seconds += (date - 1) * 24 * 60 * 60; /* 累加小时数 */ seconds += (hour) * 60 * 60; /* 累加分钟数 */ seconds += (minute)*60; /* 累加秒数 */ seconds += second; return seconds; } /* * 函数名 :utc_set * 功能 :utc日期和时间设置 * 参数 :date_time日期和时间 例20250401184500年月日时分秒 * 返回值 :无 * 备注 :无 */ void utc_set(double date_time) { /* 2024 - 2124年 */ if((date_time > 20240401010100) && (date_time < 21240401010100)) { /* 年 单片机只接受年两位 */ uint8_t year = (uint8_t)((uint64_t)date_time / 10000000000 % 100); uint8_t month = (uint8_t)((uint64_t)date_time % 10000000000 / 100000000); uint8_t date = (uint8_t)((uint64_t)date_time % 100000000 / 1000000); uint8_t hour = (uint8_t)((uint64_t)date_time % 1000000 / 10000); uint8_t minute = (uint8_t)((uint64_t)date_time % 10000 / 100); uint8_t second = (uint8_t)((uint64_t)date_time % 100); /* 设置日期 */ utc_data_set(year, month, date); /* 设置时间 */ utc_timer_set(hour, minute, second); } } /* * 函数名 :HAL_RTC_AlarmAEventCallback * 功能 :A定时闹钟回调 * 参数 :无 * 返回值 :无 * 备注 :无 */ void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) { /* A闹钟启动 */ /* 定时器设置成功 */ if(timer_alarm.is_set) { timer_alarm.is_happen = true; } } 给上述添加注释
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值