게임 엔진/Unreal
[Unreal] [DateTime] 시간 관리 구조체
AlgorFati
2023. 9. 5. 00:48
DateTime
DateTime은 언리얼에서 시간을 관리하기 위해 사용하는 구조체이다.
다음과 같이 현재 시간에 대한 정보를 얻을 수 있다.
FDateTime CurrentTimestamp = FDateTime::Now();
얻은 타임스탬프를 초로 환산하고 싶은 경우 다음과 같이 한다.
FDateTime CurrentTimestamp = FDateTime::Now();
FDateTime UnixEpochTime = FDateTime(1970, 1, 1);
double TotalMilliseconds = (CurrentTimestamp - UnixEpochTime).GetTotalMilliseconds();
두 타임스탬프를 비교하고 싶은 경우 둘 다 초로 환산하여 비교하면 된다.
타임스탬프를 직접 비교하는 경우 원하는 결과가 나오지 않을 수 있다. (Comp1 : false Comp2 : true)
FDateTime InLastTimestamp = FDateTime(1970, 1, 2);
FDateTime InCurrentTimestamp = FDateTime(1970, 1, 3);
bool bComp1 = InLastTimestamp < InCurrentTimestamp;
double A = (InLastTimestamp - UnixEpochTime).GetTotalMilliseconds();
double B = (InCurrentTimestamp - UnixEpochTime).GetTotalMilliseconds();
bool bComp2 = A < B;
UE_LOG(LogTemp, Error, TEXT("%s %s Comp1 : %d Comp2 : %d"),
*InLastTimestamp.ToString(),
*InCurrentTimestamp.ToString(),
(int32)(bComp1),
(int32)(bComp2));
다음과 같이 문자열에서 파싱도 가능하다.
FString OutTimestampText = TEXT("2023-09-04 05:56:31.185");
FDateTime OutTimestamp;
if (FDateTime::Parse(OutTimestampText, OutTimestamp))
{
// Successfully parsed the timestamp
int32 Year = ParsedDateTime.GetYear();
int32 Month = ParsedDateTime.GetMonth();
int32 Day = ParsedDateTime.GetDay();
int32 Hour = ParsedDateTime.GetHour();
int32 Minute = ParsedDateTime.GetMinute();
int32 Second = ParsedDateTime.GetSecond();
int32 Millisecond = ParsedDateTime.GetMillisecond();
UE_LOG(LogTemp, Warning, TEXT("Year: %d"), Year);
UE_LOG(LogTemp, Warning, TEXT("Month: %d"), Month);
UE_LOG(LogTemp, Warning, TEXT("Day: %d"), Day);
UE_LOG(LogTemp, Warning, TEXT("Hour: %d"), Hour);
UE_LOG(LogTemp, Warning, TEXT("Minute: %d"), Minute);
UE_LOG(LogTemp, Warning, TEXT("Second: %d"), Second);
UE_LOG(LogTemp, Warning, TEXT("Millisecond: %d"), Millisecond);
}
else
{
// Failed to parse the timestamp
UE_LOG(LogTemp, Error, TEXT("Failed to parse timestamp: %s"), *TimestampString);
}