I tried doing just subtracting the local hour and the universal hour, this worked if the local hour is greater than the universal hour; like on the morning here which is GMT+8, which gave me 8 difference but now it’s midnight it’s giving me 16.
The other one is just using a while loop and just increase the HourDifference by 1 and update the rest of the variable; however this does not work on the western places, since this always give’s me positive number:
local function GetGMTDifference(UniversalTime: DateTime, LocalTime: DateTime)
local UniversalHour, LocalHour = UniversalTime.Hour, LocalTime.Hour
local UniversalMinute, LocalMinute = UniversalTime.Minute, LocalTime.Minute
local HourDifference, MinuteDifference = 0, 0
while (UniversalHour ~= LocalHour) do
UniversalHour += 1
UniversalHour %= 24
HourDifference += 1
end
while (UniversalMinute ~= LocalMinute) do
UniversalMinute += 1
UniversalMinute %= SECONDS_IN_MINUTE
MinuteDifference += 1
end
return HourDifference, MinuteDifference
end
So I got something though I’m not sure if this works on the eastern or GMT-, it would be helpful if someone on the other side of the earth would test this out; just copy the code and test it out, if it works and got the same GMT then I conclude this as the solution.
local function GetHourDifference(UniversalHour, LocalHour, IsPositive)
local HourDifference = 0
local Amount = (IsPositive) and 1 or -1
while (UniversalHour ~= LocalHour) do
UniversalHour += Amount
UniversalHour %= 24
HourDifference += Amount
end
if (HourDifference > 0) then
HourDifference = "+"..HourDifference
end
return HourDifference
end
local function GetMinuteDifference(UniversalMinute, LocalMinute, IsPositive)
local MinuteDifference = 0
local Amount = (IsPositive) and 1 or -1
while (UniversalMinute ~= LocalMinute) do
UniversalMinute += Amount
UniversalMinute %= SECONDS_IN_MINUTE
MinuteDifference += Amount
end
return MinuteDifference
end
local function GetGMTDifference(UniversalTime: DateTime, LocalTime: DateTime)
local UniversalHour, LocalHour = UniversalTime.Hour, LocalTime.Hour
local UniversalMinute, LocalMinute = UniversalTime.Minute, LocalTime.Minute
local HourDifference, MinuteDifference
local UniversalDay, LocalDay = UniversalTime.Day, LocalTime.Day
if (LocalDay > UniversalDay) then
HourDifference = GetHourDifference(UniversalHour, LocalHour, true)
MinuteDifference = GetMinuteDifference(UniversalMinute, LocalMinute, true)
elseif (LocalDay < UniversalDay) then
HourDifference = GetHourDifference(UniversalHour, LocalHour, false)
MinuteDifference = GetMinuteDifference(UniversalMinute, LocalMinute, false)
else
if (LocalHour >= UniversalHour) then
HourDifference = GetHourDifference(UniversalHour, LocalHour, true)
else
HourDifference = GetHourDifference(UniversalHour, LocalHour, false)
end
if (LocalMinute >= UniversalMinute) then
MinuteDifference = GetMinuteDifference(UniversalMinute, LocalMinute, true)
else
MinuteDifference = GetMinuteDifference(UniversalMinute, LocalMinute, false)
end
end
return HourDifference, MinuteDifference
end
local Now = DateTime.now()
local LocalTime = Now:ToLocalTime()
local UniversalTime = Now:ToUniversalTime()
print(("GMT%02i:%02i"):format(GetGMTDifference(UniversalTime, LocalTime)))