1、需求:获取前N天的日期来筛选数据
1.1、使用场景
如果是有联网接口的话可以直接使用网络请求来筛选数据,如果是内网或者无网环境那么该如何获取指定日期来进行筛选呢,本文介绍了如何获取前N天的日期。
2、实现
2.1、创建函数库
本文实现的方法是使用继承蓝图函数库创建的C++类来实现的,所以函数是静态的,如果需要在类当中调用可以去掉static。如下图创建蓝图函数库
2.2、头文件
注意创建的c++类的名称,我这里命名为MyBlueprintFunctionLibrary
这里是.h头文件的函数定义,传入一个整型Num,就是前Num天
//.h UFUNCTION(BlueprintCallable, BlueprintPure, DisplayName = "获取前N天的年月日") static void GetLastWeek(int32 Num, int32& Year, int32& Month,int32& Day);
2.3、函数实现
先上代码块,注意void后面的MyBlueprintFunctionLibrary就是刚刚创建的类的名称,如果你刚刚使用的不是和我一样的就修改为自己设置的类名称。
void MyBlueprintFunctionLibrary::GetLastWeek(int32 Num,int32& Year, int32& Month, int32& Day) { //本年 Year = UKismetMathLibrary::Now().GetYear(); //本月 Month = UKismetMathLibrary::Now().GetMonth(); //本日 Day = UKismetMathLibrary::Now().GetDay(); //如果本日小于前Num天 if (Day - Num <= 0) { //本月是不是一月 if (Month - 1 == 0) { //是,则是今年-1=去年 Year = Year-1; //月等于12月 Month = 12; //日就是去年十二月份的天数减去 今日减前Num天的绝对值 Day = UKismetMathLibrary::DaysInMonth(Year - 1, 12) - UKismetMathLibrary::Abs(Day - Num); } else { //不是就正常减 Month = Month - 1; //天数正常获取 Day = UKismetMathLibrary::DaysInMonth(Year, Month - 1) - UKismetMathLibrary::Abs(Day - Num); } } else { //本月天数足够减,直接把本日天数减去前Num天 Day = Day - Num; } }
以上就是代码和注释了,那我们来试验一下结果吧~
3、测试
3.1、前N天还在本月内
先测试一下在本月内的日期,刚好现在是一月,今天是2024/1/25,我们获取前7天应该是2024/1/18
按下1打印一下,发现没有问题~
3.2、前N天不在本月内
那再来测试一下大于本月天数,前25天,那刚好就是2024/12/31
按下1打印测试一下~
没有问题,符合要求
4、结语
好了,本次分享结束了,如果对您有起到帮助,麻烦点个赞吧!