How to convert the number of seconds from an epoch into UTC using the datetime function.
143 次查看(过去 30 天)
显示 更早的评论
I am struggling to convert the number of seconds from an epoch (1980-01-06 GPS epoch) into UTC using the datetime function. The following commands give me a time of 18-Mar-2021 20:37:31, however in UTC this should be 18-Mar-2021 20:37:13 since I would need to subtract out the number of leap seconds from the total (currently there are 18 leap seconds since the 1980-01-06 GPS epoch).
NoOfSeconds=1300135051;
datetime(NoOfSeconds,'convertfrom','epochtime','Epoch','1980-01-06')
Can the datetime function automatically account for leapseconds in this conversion? I tried using the 'TimeZone','UTCLeapSeconds' name/value pair, but this adds 18 seconds since it assumes the time is already in UTC.
0 个评论
采纳的回答
Peter Perkins
2021-8-2
Matthew, this is easier than you think. In MATLAB, 'TimeZone','UTC' is sort of a ficticious timeline that pretends that leaps seconds don't exist (because hardly anyone wants to actually account for leap seconds). 'UTCLeapSeconds' is the timeline that knows all about leap seconds. The GPS timeline (in the real world) ticks off the same leap seconds as 'UTCLeapSeconds' in MATLAB does, it just doesn't treat them specially. So for the purposes of arithmetic, i.e. elapsed time, 'UTCLeapSeconds' is what you want. Then all you have to do is change to 'UTC' (or not, it's up to you).
>> epoch = datetime(1980,1,6,'TimeZone','UTCLeapSeconds')
epoch =
datetime
1980-01-06T00:00:00.000Z
>> dtUTC = epoch + seconds(1300135051)
dtUTC =
datetime
2021-03-18T20:37:13.000Z
>> dtUTC.TimeZone = 'UTC'
dtUTC =
datetime
18-Mar-2021 20:37:13
Also, this Answer might be helpful:
If I may ask, I would be interested in hearing more about how you work with GPS timestamps. Do you always get "seconds since 1980" as your input? Do you need to work with "week number, seconds within week"? Do you need to work with "human readable timestamps" (e.g. 18-Mar-2021 20:37:31) that refer to the GPS timeline (as opposed to UTC)? Do you need to convert back to one of those GPS time formats? Thanks in advance for anything you are able to share.
5 个评论
Peter Perkins
2022-6-20
I imagine what you mean is convert GPS week/second to UTC. It would be good for you to be clear.
The GPS timeline has no leap seconds or DST, so each week is equal length. Convert to seconds, and then do what's described earlier in this thread.
更多回答(2 个)
Sarthak
2024-3-13
function date = gps2utc(g0, g1)
date = datevec(datetime(g0*604800+g1,'convertfrom','epochtime','Epoch','1980-01-06'));
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Dates and Time 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!