UE4/UE5获取时间戳和两个时间戳的差

//#include "Windows/AllowWindowsPlatformTypes.h"
//#include "Windows/PreWindowsApi.h"
//#include <windows.h> //冲突头文件  GetWTimestamp()使用到
//#include "Windows/PostWindowsApi.h"
//#include "Windows/HideWindowsPlatformTypes.h"

#include <math.h>
#include <cstring>
#include <ctime>
#include <time.h>

#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>

#include <sys/timeb.h>

using namespace std;

UFUNCTION(BlueprintPure, Category = "Utilities")
		static FString  GetTimestamp();//时间戳 13位 毫秒级别

	UFUNCTION(BlueprintPure, Category = "Utilities")
		static double  GetDiffTime(FString StartT, FString EndT);//参数StartT、 EndT 分别为开始和结束的时间戳,返回两个时间戳的差,单位秒

FString UXXXFunctionLibrary::GetTimestamp()
{

	//当前时间戳
		/*
		FDateTime Time = FDateTime::Now();
		//获取秒时间戳
		int64 Timestamp = Time.ToUnixTimestamp();
		FString StrTimestamp = FString::Printf(TEXT("%lld"), Timestamp);
		UE_LOG(LogShooterInstance, Log, TEXT("%d"), Timestamp);
		//获取毫秒时间戳
		int64 M= 1000;
		int64 MilliTimestamp = Time.ToUnixTimestamp() * M;
		FString StrMilliTimestamp = FString::Printf(TEXT("%lld"), MilliTimestamp);
		UE_LOG(LogShooterInstance, Log, TEXT("%d"), MilliTimestamp);
		*/


	//windows
	/*std::string nowTimeUnix;
	std::string cs_uninxtime;
	std::string cs_milliseconds;
	SYSTEMTIME sysTime;
	GetLocalTime(&sysTime);
	time_t unixTime;
	time(&unixTime);
	char buf[30], bufms[30];
	sprintf_s(buf, sizeof(buf), "%I64d", (INT64)unixTime);
	sprintf_s(bufms, sizeof(bufms), "%03I64d", (INT64)sysTime.wMilliseconds);
	nowTimeUnix = string(buf) + string(bufms);
	FString Timestamp = FString(nowTimeUnix.c_str());
	UE_LOG(LogTemp, Log, TEXT("Timestamp:%s"), *Timestamp);
	return Timestamp;*/

	timeb t;
	ftime(&t);
	long long ms = t.time * 1000 + t.millitm;//自定义时间戳
	FString Strtimestamp = FString::Printf(TEXT("%lld"), ms);

	UE_LOG(LogBlueprintFunc, Log, TEXT("GetWTimestamp=%s"), *Strtimestamp);
	return Strtimestamp; 
}

double UXXXFunctionLibrary::GetDiffTime(FString StartT, FString EndT)
{
	time_t start, end;
	double cost;

	std::string startStr(TCHAR_TO_UTF8(*StartT));
	long long timestampStart = atoll(startStr.c_str());//int ms = timestamp % 1000;//取毫秒
	start = (time_t)(timestampStart / 1000);//转换时间

	std::string endStr(TCHAR_TO_UTF8(*EndT));
	long long timestampEnd = atoll(endStr.c_str());
	end = (time_t)(timestampEnd / 1000);//转换时间

	cost = difftime(end, start);

	return cost;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值