蔡勒公式:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
.h:
/* 根据日期获得星期几 C为年份前两位,Year为年份后两位,Month为月份,Day为号数,
如果Day/Month任意一项为0的时候,那么则根据当前系统时间计算 */
UFUNCTION(BlueprintCallable, Category = "DayOfWeek")
static void GetDayOfWeek(int32 Day, int32 Month, int32 Year, int32 C,int32 W,FString& Weekday);
.cpp:
注意添加对应的头文件:
#include "Runtime/Core/Public/Misc/DateTime.h"
#include "Kismet/KismetStringLibrary.h"
/*如果Day/Month任意一项为0的时候,那么则根据当前系统时间计算*/
if (Day == 0 || Month == 0)
{
FDateTime Time = FDateTime::Now();
FString CAndYear = FString::FromInt(Time.GetYear());
FString Century = UKismetStringLibrary::GetSubstring(CAndYear, 0, 2);
FString Y = UKismetStringLibrary::GetSubstring(CAndYear, 2, 4);
C = FCString::Atoi(*Century);
Year = FCString::Atoi(*Y);
Month = Time.GetMonth();
Day = Time.GetDay();
}
/* 1、2月份需看作上一年的13、14月来计算 */
if (Month == 1 || Month == 2)
{
Month += 12;
if (Year == 0)
{
Year = 99;
//C -= 1;
}
else
{
Year -= 1;
}
}
/* 计算W的值 */
W = (static_cast<int>(C / 4.0) - 2 * C + Year + static_cast<int>(Year / 4.0) + static_cast<int>(26 * (Month + 1) / 10.0) + Day - 1)%7;
/* 输出今天是星期几 */
if (W) {
switch(W) {
case 0 :
Weekday = TEXT("星期日");
//此处也可写为Weekday = L("星期日");
break;
case 1:
Weekday = TEXT("星期一");
break;
case 2:
Weekday = TEXT("星期二");
break;
case 3:
Weekday = TEXT("星期三");
break;
case 4:
Weekday = TEXT("星期四");
break;
case 5:
Weekday = TEXT("星期五");
break;
case 6:
Weekday = TEXT("星期六");
break;
}
}
如果添加了中文注释,到引擎里面乱码了,可以看看我之前的一篇文章
解决中文注释乱码