mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-04-22 04:24:44 +00:00
fix ConvertUtcToLocalTime,RtcConvertLocalTimeToUtc
This commit is contained in:
parent
ee3cf93973
commit
67350b17dc
2 changed files with 14 additions and 30 deletions
|
@ -80,7 +80,7 @@ int PS4_SYSV_ABI sceRtcConvertLocalTimeToUtc(OrbisRtcTick* pTickLocal, OrbisRtcT
|
|||
|
||||
if (convertValue >= 0) {
|
||||
convertValue = sceRtcTickAddMinutes(
|
||||
pTickUtc, pTickLocal, -((timezone.tz_dsttime + timezone.tz_minuteswest) / 60));
|
||||
pTickUtc, pTickLocal, -(((timezone.tz_dsttime * 60) - timezone.tz_minuteswest)));
|
||||
}
|
||||
|
||||
return convertValue;
|
||||
|
@ -95,29 +95,13 @@ int PS4_SYSV_ABI sceRtcConvertUtcToLocalTime(OrbisRtcTick* pTickUtc, OrbisRtcTic
|
|||
time_t seconds;
|
||||
Kernel::OrbisTimesec timezone;
|
||||
|
||||
int convertValue = Kernel::sceKernelConvertUtcToLocaltime(
|
||||
(pTickUtc->tick + 0xff23400100d44000U) / 1000000, &seconds, &timezone, 0);
|
||||
Kernel::OrbisKernelTimezone timeZone;
|
||||
int returnValue = Kernel::sceKernelGettimezone(&timeZone);
|
||||
|
||||
if (convertValue >= 0) {
|
||||
auto newTime = ((timezone.dst_sec + timezone.west_sec) / 60) * 60000000;
|
||||
sceRtcTickAddMinutes(pTickLocal, pTickUtc,
|
||||
-(timeZone.tz_minuteswest - (timeZone.tz_dsttime * 60)));
|
||||
|
||||
if (pTickLocal == nullptr)
|
||||
return ORBIS_RTC_ERROR_INVALID_POINTER;
|
||||
|
||||
if (newTime < 0) {
|
||||
if (pTickUtc->tick < -newTime) {
|
||||
return ORBIS_RTC_ERROR_INVALID_VALUE;
|
||||
}
|
||||
} else {
|
||||
if ((pTickUtc->tick + newTime) < pTickUtc->tick) {
|
||||
return ORBIS_RTC_ERROR_INVALID_VALUE;
|
||||
}
|
||||
}
|
||||
pTickLocal->tick = pTickUtc->tick + newTime;
|
||||
convertValue = 0;
|
||||
}
|
||||
|
||||
return convertValue;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceRtcEnd() {
|
||||
|
@ -471,14 +455,13 @@ int PS4_SYSV_ABI sceRtcSetDosTime(OrbisRtcDateTime* pTime, u32 dosTime) {
|
|||
pTime->microsecond = 0;
|
||||
pTime->second = (dosTime << 1) & 0x3e;
|
||||
pTime->minute = (dosTime >> 5) & 0x3f;
|
||||
pTime->hour = ((dosTime & 0xf800) >> 0xb);
|
||||
pTime->hour = (dosTime & 0xf800) >> 0xb;
|
||||
|
||||
int days = (dosTime >> 0x10);
|
||||
int16_t days = dosTime >> 0x10;
|
||||
|
||||
pTime->day = days & 0x1f;
|
||||
pTime->month = (days >> 5) & 0xf;
|
||||
pTime->year = (days >> 9) + 0x7bc;
|
||||
|
||||
pTime->month = (days >> 5) & 0x0f;
|
||||
pTime->year = (days >> 9) + 1980;
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
|
@ -559,13 +542,13 @@ int PS4_SYSV_ABI sceRtcSetTime_t(OrbisRtcDateTime* pTime, time_t llTime) {
|
|||
return SCE_OK;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceRtcSetWin32FileTime(OrbisRtcDateTime* pTime, uint64_t ulWin32Time) {
|
||||
int PS4_SYSV_ABI sceRtcSetWin32FileTime(OrbisRtcDateTime* pTime, int64_t ulWin32Time) {
|
||||
LOG_TRACE(Lib_Rtc, "called");
|
||||
|
||||
if (pTime == nullptr)
|
||||
return ORBIS_RTC_ERROR_INVALID_POINTER;
|
||||
|
||||
u64 convertedTime = (ulWin32Time / 10) + 0xb36168b6a58000;
|
||||
u64 convertedTime = (ulWin32Time / 10) + WIN32_FILETIME_EPOCH_TICKS;
|
||||
|
||||
OrbisRtcTick convertedTick;
|
||||
convertedTick.tick = convertedTime;
|
||||
|
|
|
@ -20,6 +20,7 @@ constexpr int ORBIS_RTC_DAYOFWEEK_FRIDAY = 5;
|
|||
constexpr int ORBIS_RTC_DAYOFWEEK_SATURDAY = 6;
|
||||
|
||||
constexpr int64_t UNIX_EPOCH_TICKS = 0xdcbffeff2bc000;
|
||||
constexpr int64_t WIN32_FILETIME_EPOCH_TICKS = 0xb36168b6a58000;
|
||||
|
||||
struct OrbisRtcTick {
|
||||
uint64_t tick;
|
||||
|
@ -74,7 +75,7 @@ int PS4_SYSV_ABI sceRtcSetCurrentTick();
|
|||
int PS4_SYSV_ABI sceRtcSetDosTime(OrbisRtcDateTime* pTime, u32 dosTime);
|
||||
int PS4_SYSV_ABI sceRtcSetTick(OrbisRtcDateTime* pTime, OrbisRtcTick* pTick);
|
||||
int PS4_SYSV_ABI sceRtcSetTime_t(OrbisRtcDateTime* pTime, time_t llTime);
|
||||
int PS4_SYSV_ABI sceRtcSetWin32FileTime(OrbisRtcDateTime* pTime, uint64_t ulWin32Time);
|
||||
int PS4_SYSV_ABI sceRtcSetWin32FileTime(OrbisRtcDateTime* pTime, int64_t ulWin32Time);
|
||||
int PS4_SYSV_ABI sceRtcTickAddDays(OrbisRtcTick* pTick1, OrbisRtcTick* pTick2, int32_t lAdd);
|
||||
int PS4_SYSV_ABI sceRtcTickAddHours(OrbisRtcTick* pTick1, OrbisRtcTick* pTick2, int32_t lAdd);
|
||||
int PS4_SYSV_ABI sceRtcTickAddMicroseconds(OrbisRtcTick* pTick1, OrbisRtcTick* pTick2,
|
||||
|
|
Loading…
Add table
Reference in a new issue