步骤1: 首先创建一个父类为BlueprintFunctionLibrary的C++类
2.命名为 BPF_UnixTimestampToDateTime ,会自动打开VS2019,生成一个类;
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Misc/DateTime.h"
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "BPF_UnixTimestampToDateTime.generated.h"
/**
*
*/
UCLASS()
class MYPROJECT_API UBPF_UnixTimestampToDateTime : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
//
UFUNCTION(BlueprintPure, Category = "UnixTimestamp")
static FDateTime UnixTimestampToDateTime(int64 UnixTime);
UFUNCTION(BlueprintPure, Category = "UnixTimestamp")
static FDateTime UnixTimestampToDateTime_s(FString UnixTime);
};
上面这段代码,值得注意的是,每个想要暴露给蓝图的函数或者变量,都必须要声明
比如: UFUNCTION(BlueprintPure, Category = "UnixTimestamp")
// Fill out your copyright notice in the Description page of Project Settings.
#include "BPF_UnixTimestampToDateTime.h"
FDateTime UBPF_UnixTimestampToDateTime::UnixTimestampToDateTime_s(FString UnixTime)
{
char* result = TCHAR_TO_ANSI(*UnixTime);
uint64 unixTime_t = _atoi64(result);
uint64 tmpUnix = unixTime_t / 1000;
//sprintf(result, "%lld", unixTime_t);
FDateTime Time = FDateTime::FromUnixTimestamp(tmpUnix);
FTimespan spanT = FTimespan(8,0,0);
Time = Time.operator+(spanT); //UTC time +8 hour(china)/
/*
UE_LOG(LogTemp, Warning, TEXT("%lld"), tmpUnix);
int year = Time.GetYear();
int month = Time.GetMonth();
int day = Time.GetDay();
int hour = Time.GetHour();
int minute = Time.GetMinute();
int second = Time.GetSecond();
UE_LOG(LogTemp, Warning, TEXT("时间:%d, %d, %d, %d, %d, %d"), year, month, day, hour, minute, second);
*/
return Time;
}
因为linux系统传过来的时间戳是13位,然而UE4.26系统能转换的只有10位,所以需要除以1000(去掉毫秒部分),然后FromUnixTimestamp函数 才能得到正确的时间。
3.然后编译... 在蓝图里用;右键输入函数 UnixTimestampToDateTime_s