Filter löschen
Filter löschen

how to convert 18 digits timestamp to readable date and time in MATLAB

67 Ansichten (letzte 30 Tage)
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 Kommentare
Guillaume
Guillaume am 24 Apr. 2015
I'm not sure why you're providing more samples. As far as I can tell, I've answered your question.
ameen
ameen am 24 Apr. 2015
I added more samples as required by @ Brendan Hamm

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 23 Apr. 2015
Bearbeitet: James Tursa am 24 Apr. 2015
This page may be useful.
Most likely, your timestamp is a .Net System.DateTime
>>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 Kommentare
Guillaume
Guillaume am 24 Apr. 2015
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.
ameen
ameen am 24 Apr. 2015
Thank you very much Guillaume for your help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Peter Perkins
Peter Perkins am 24 Apr. 2015
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
William Bertram am 8 Mär. 2017
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)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by