Convert from Coordinated UTC to datetime?
55 次查看(过去 30 天)
显示 更早的评论
I have a list of times formatted in coordinated UTC time. For example, the first data entry point I have is
1.511092230713565e+05
where the first six digits are the year, month and day (so 11/09/2015) and the rest of the digits are the fraction of the day. How do I extract the the first six digits and then convert the rest of the digits so I can convert the time to a datenum array?
0 个评论
回答(2 个)
Dave B
2021-11-5
编辑:Dave B
2021-11-5
You can do this easily with datetime:
x=1.511092230713565e+05;
% The date part is the part before the decimal, so use floor
d = datetime(string(floor(x)),'InputFormat','yyMMdd')
% The time part is fractions of a day, remove the date part and call days
% to get a duration
t = days(x-floor(x))
% The result is the date part (which will be midnight) plus the fraction of
% a day
dt = d+t
% If you really must use datenum (though this is not recommended, datetime is so much better!)
datenum(dt)
0 个评论
Star Strider
2021-11-5
A different approach —
format long g
nr = 1.511092230713565e+05;
dt = datetime(num2str(fix(nr)),'InputFormat','yyMMdd') + timeofday(datetime(datevec(rem(nr,1))))
dn = datenum(dt)
.
1 个评论
Dave B
2021-11-5
I like the rem(nr,1) better than my x-floor(x), and I think fix is technically the accurate choice if there might be some BC dates?
Less sure about timeofday(datetime(datevec())) vs. days()
另请参阅
类别
在 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!