Known time desc » History » Revision 30
Revision 29 (Anonymous, 08/07/2016 12:15 PM) → Revision 30/31 (Anonymous, 08/07/2016 12:28 PM)
h1. Known time description
h2. Double Time ranges : date from 01/01/1970 to 01/01/2100
* seconds from 01/01/1970 00:00:00 : 0 to 4 102 488 000
* milliseconds from 01/01/1970 00:00:00 : 0 to 4 102 488 000 000 (ambiguity for the first 48days of 1970 with previous time format)
* seconds from 01/01/0000 00:00:00 : 62 168 472 000 to 66 270 960 000 (no ambiguity)
* milliseconds from 01/01/0000 00:00:00 : 62 168 472 000 000 to 66 270 960 000 000 (no ambiguity)
* seconds from 01/01/2000 00:00:00 : - 946 728 000 to 3 155 760 000 (TT2000)
* milliseconds from 01/01/2000 00:00:00 : - 946 728 000 000 to 3 155 760 000 000 (ambiguity with TT2000 in seconds?)
µs, ns, ps might also be needed for tt2000
Double (IEEE754)
64bits
min value: -1.7977E+308
max value :1.7977E+308
Number of seconds per year = 60*60*24*365.25 = 31 557 600
Numbers for 100 years :
3 155 760 000 s = 3.15576 e+9 s
3 155 760 000 000 ms = 3.15576 e+12 ms
3 155 760 000 000 000 µs = 3.15576 e+15 µs
3 155 760 000 000 000 000 ns = 3.15576 e+18 ns
3 155 760 000 000 000 000 000 ps = 3.15576 e+21 ps
Typical dynamics for a double seems to be 15 digits, after that we might experiment precision loss.
Recommendation is to store time in QLop as microseconds since Epoch (01-01-1970 00:00:00)
h2. Known time description
|_.Mission Name |_.time var name |_. units |_.DEPEND |_.LABLAXIS|_.FIELDNAM |_.CATDESC |_.Type |_.VIRTUAL|_.nb of records|_.VAR_NOTES|
|Cluster FGM |time_tags__CDFNAME |ms |0 |UT |Universal Time |Interval centred time tag |CDF_EPOCH | |normal |field missing|
|Cluster HIA |time_tags__CDFNAME |ms |0 |UT |Center Time |Interval centred time tag |CDF_EPOCH | |normal |field missing|
||||||||||||
|Themis Efi,SCM |VARNAME_time |sec |TIME |UT |Same as time var name|UTC, in seconds sinc 01-Jan-1970 00:00:00|CDF_DOUBLE | |normal |Unleaped seconds|
|Themis Efi,SCM |VARNAME_epoch |field missing|0 |UT |Same as time var name|Unrelated |CDF_EPOCH |true |0 |field missing|
|Themis Efi,SCM |VARNAME_dot0_epoch0|msec |EPOCH0 |UT |Same as time var name|EPOCH of THEMIS time base |CDF_EPOCH | |1 |EPOCH of 01-Jan-1970 00:00:00|
|Themis Esa |VARNAME_time |sec |TIME |UT |Same as time var name|UTC, in seconds sinc 01-Jan-1970 00:00:00|CDF_REAL8 | |normal |Unleaped seconds|
|Themis Esa |VARNAME_epoch |field missing|0 |UT |Same as time var name|Unrelated |CDF_EPOCH |true |0 |field missing|
|Themis Esa |VARNAME_dot0_epoch0|msec |EPOCH0 |UT |Same as time var name|EPOCH of THEMIS time base |CDF_EPOCH | |1 |EPOCH of 01-Jan-1970 00:00:00|
|Themis Peer |VARNAME_time |sec |TIME |UT |Same as time var name|UTC, in seconds sinc 01-Jan-1970 00:00:00|CDF_DOUBLE | |> data |Unleaped seconds|
|Themis Peer |VARNAME_epoch |field missing |0 |UT |Same as time var name|VARNAME |CDF_EPOCH | |normal |field missing|
|Themis Peer |VARNAME_epoch0 |msec |EPOCH0 |timebase |Same as time var name|EPOCH of THEMIS time base |CDF_EPOCH | |1 |EPOCH of 01-Jan-1970 00:00:00|
||||||||||||
|MMS fpi |Epoch (absent, Epoch_minus_var is present) |s |0 |Field missing | VARNAME|VARNAME |CDF_UINT1 | |1 |VARNAME|
|MMS scm |epoch_timetag |ns |0 |VARNAME |Same as time var name|Packet time time |CDF_TIME_TT2000| |normal |field missing|
|MMS scm |Epoch (other var time) |ns |0 |VARNAME |Same as time var name|Time |CDF_TIME_TT2000| |normal |field missing|
||||||||||||
|ACE mfi |Epoch |ms |0 |VARNAME |Time |Time ,beginning of interval |CDF_EPOCH | |normal |field missing|
||||||||||||
|Helios nessmag |Epoch |ms |0 |field missing |Epoch |Default Time |CDF_EPOCH | |normal |field missing|
||||||||||||
|Ulysses hft |Epoch |ms |0 |Time |Epoch |Time in NSSDC Epoch format |CDF_EPOCH | |normal |field missing|
||||||||||||
|SOHO cst |Epoch |ms |0 |Epoch |Time Line |Time |CDF_EPOCH | |normal |field missing|
h2. Algorithm Proposition
VariableThatNeedsTime
depend0 = get(VariableThatNeedsTime.DEPEND_0 variable)
if(depend0.nbOfRec == VariableThatNeedsTime.nbOfRec)
* test depend0.firstValue for different double range mentionned above (this part might include CDF_TYPE for TT2000)
* if(ambiguity)
** look at depend0.units
** if field is missing, look at VariableThatNeedsTime.depend_epoch0.units field
//ATM, these lines are written, epoch0 units are useless since that variable only appears when matching time is DEPEND_TIME variable
else
dependTime = get(VariableThatNeedsTime.DEPEND_TIME variable)
if(dependTime.nbOfRec == VariableThatNeedsTime.nbOfRec)
* test dependTime.firstValue for different double range mentionned above (this part might include CDF_TYPE for TT2000)
* if(ambiguity)
** look at dependTime.units
h2. Useful links
http://spdf.gsfc.nasa.gov/CDFconversion/time_formats.html
http://cdf.gsfc.nasa.gov/html/leapseconds_requirements.html
how autoplot is processing cdf files :
http://autoplot.org/help#Reading_CDF