how to convert 18 digits timestamp to readable date and time in MATLAB
조회 수: 47 (최근 30일)
이전 댓글 표시
I have data with a time step consists of 18 digits such as 634019142119225390. This date should be in February 2010 by the way.
How can i convert this into readable date and time in MATLAB ?
Unfortunately i don't know what is the format of this timestamp. Is it UNIX or Julian or what.
Many Thanks in advance
댓글 수: 6
Guillaume
2015년 4월 24일
I'm not sure why you're providing more samples. As far as I can tell, I've answered your question.
채택된 답변
Guillaume
2015년 4월 23일
편집: James Tursa
2015년 4월 24일
>>ts = int64(634019142119225390);
>>dt = System.DateTime(ts); %Note that you need to be on Windows for this to work
>>dt.ToString
ans =
16/02/2010 00:00:00
댓글 수: 5
Guillaume
2015년 4월 24일
As per the documentation of System.DateTime, its resolution is 100 nanoseconds. Therefore the difference between your two timestamps is only 1 microsecond.
You need to add 10,000,000 (1e7) to just go up one second.
추가 답변 (2개)
Peter Perkins
2015년 4월 24일
Another option, if you have MATLAB R2014b or later, is this:
>> x = [uint64(634019142119225390) uint64(634019142129597610) uint64(634019142139821660)]
x =
634019142119225390 634019142129597610 634019142139821660
>> datetime(double(x)/1e7,'ConvertFrom','epochtime','Epoch','1-Jan-0001','Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS')
ans =
16-Feb-2010 10:50:11.922531250 16-Feb-2010 10:50:12.959757812 16-Feb-2010 10:50:13.982171875
But that's not exactly right -- those uint64's are larger than flintmax, so casting them to double introduces round-off. You may not care about 100ns resolution. If you only cared about 1ms resolution, you could do this:
>> datetime(double(x/1e4)/1e3,'ConvertFrom','epochtime','Epoch','1-Jan-0001','Format','dd-MMM-yyyy HH:mm:ss.SSS')
ans =
16-Feb-2010 10:50:11.923 16-Feb-2010 10:50:12.960 16-Feb-2010 10:50:13.982
But to get exactly what you started with, do this:
>> secs = (x-.5e7)/1e7
secs =
63401914211 63401914212 63401914213
>> milliSecs = double(x - uint64(secs)*1e7)/1e4
milliSecs =
922.539 959.761 982.166
>> datetime(secs,'ConvertFrom','epochtime','Epoch','1-Jan-0001','Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS') + milliseconds(milliSecs)
ans =
16-Feb-2010 10:50:11.922539000 16-Feb-2010 10:50:12.959761000 16-Feb-2010 10:50:13.982166000
William Bertram
2017년 3월 8일
634019142119225390 appears to be the number of nanoseconds that has elapsed since 01/01/0001 00:00. Here is a quick Powershell to convert that to human readable:
$timestamp = 636244407153688066 / 10000000
$epochDate = [datetime]"01/01/0001 00:00"
$epochDate.AddSeconds($timestamp)
댓글 수: 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!