From ab4ebdc4245b7026ae8dc277e3844584c0b6f333 Mon Sep 17 00:00:00 2001
From: Jacques Grelet <jacques.grelet@ird.fr>
Date: Tue, 17 Jan 2012 15:36:18 +0000
Subject: [PATCH] simplify and improve date format management for future use,
 version as number 1.22 now read GOSUD 1.4 to 2.0 works now. Need to be more
 tested

---
 @netcdf_native/tsgqc_netcdf.csv |  20 +++++------
 @netcdf_native/tsgqc_netcdf.xls | Bin 56320 -> 56320 bytes
 TSGQC_amelioration.xls          | Bin 52736 -> 52736 bytes
 tsg_io/readArgoLocean.m         |   3 +-
 tsg_io/readAsciiSample.m        |  16 ++-------
 tsg_io/readAsciiTsg.m           |  16 ++-------
 tsg_io/readTsgDataAstrolabe.m   |   8 ++---
 tsg_io/readTsgDataLabview.m     |   3 +-
 tsg_io/readTsgDataNetCDF.m      |  16 +++++++++
 tsg_io/readTsgDataNuka.m        |   5 +--
 tsg_io/readTsgDataOracle.m      |   5 +--
 tsg_io/writeAsciiSample.m       |  11 +-----
 tsg_io/writeAsciiTsg.m          |  21 +++++-------
 tsg_io/writeTSGDataNetCDF.m     |   1 +
 tsg_util/headerForm.m           |  53 ++++++++++++++++++-----------
 tsg_util/netcdfTOtsgqc.m        |   6 ++--
 tsg_util/tsg_initialisation.m   |  12 ++++---
 tsg_util/tsg_preferences.m      |   8 +++--
 tsg_util/updateTsgStruct.m      |  57 +++++++++++++++++++++++++++++---
 tsgqc.m                         |   4 +--
 20 files changed, 161 insertions(+), 104 deletions(-)

diff --git a/@netcdf_native/tsgqc_netcdf.csv b/@netcdf_native/tsgqc_netcdf.csv
index db3a2f4..4db6628 100644
--- a/@netcdf_native/tsgqc_netcdf.csv
+++ b/@netcdf_native/tsgqc_netcdf.csv
@@ -18,9 +18,9 @@ $DIMENSIONS$
 $VARIABLES$
 #;key__;dimension__;type__;long_name;standard_name;units;conventions;valid_min;valid_max;format;FillValue_;epic_code;axis;resolution;comment;default_value;coordinate;#
 #;char;cell;char;char;char;char;char;double;double;char;double;double;char;double;char;double;char;#
-#;REFERENCE_DATE_TIME;'STRING14';char;ORIGIN OF TIME;;;yyyymmddhhmmss;;;;;;;;Reference date for julian days origin;;;#
-#;DATE;'DAYD','STRING14';char;DATE OF MAIN INSTRUMENT MEASUREMENT;;;yyyymmddhhmmss;;;;;;;;This is the original data describing the date, it must not be lost;;DAYD;#
-#;DATE_EXT;'DAYD_EXT','STRING14';char;DATE OF EACH EXTERNAL DATA MEASUREMENT;;;yyyymmddhhmmss;;;;;;;;This is the original data describing the date, it must not be lost;;DAYD_EXT;#
+#;REFERENCE_DATE_TIME;'STRING14';char;ORIGIN OF TIME;;;yyyymmddHHMMSS;;;;;;;;Reference date for julian days origin. The recommended reference date time is "19500101T000000Z": January 1st 1950 00:00:00;;;#
+#;DATE;'DAYD','STRING14';char;DATE OF MAIN INSTRUMENT MEASUREMENT;;;yyyymmddHHMMSS;;;;;;;;This is the original data describing the date, it must not be lost;;DAYD;#
+#;DATE_EXT;'DAYD_EXT','STRING14';char;DATE OF EACH EXTERNAL DATA MEASUREMENT;;;yyyymmddHHMMSS;;;;;;;;This is the original data describing the date, it must not be lost;;DAYD_EXT;#
 #;DAYD;'DAYD';double;DECIMAL JULIAN DAY (UTC) OF EACH MEASUREMENT;time;days since REFERENCE_DATE_TIME;Relative julian days with decimal part (as parts of the day);0;36600;%11.5f;;601;T;;Julian day of the measurement since REFERENCE_DATE_TIME;;DAYD;#
 #;DAYD_EXT;'DAYD_EXT';double;DECIMAL JULIAN DAY (UTC) OF EXTERNAL DATA MEASUREMENT;time;days since REFERENCE_DATE_TIME;Relative julian days with decimal part (as parts of the day);0;36600;%11.5f;;601;T;;Julian day of the measurement since REFERENCE_DATE_TIME;;DAYD_EXT;#
 #;LATX;'DAYD';float;LATITUDE OF EACH MEASUREMENT;latitude;degree_north;;-90;90;%+8.4f;99999;500;Y;;Latitude of the measurement (decimal);;DAYD;#
@@ -84,7 +84,7 @@ $VARIABLES$
 #;SSPS_EXT;'DAYD_EXT';float;SEA SURFACE SALINITY FROM EXTERNAL DATA;sea_surface_salinity;;;0;40;%6.3f;99999;;;0.001;Sea Surface Salinity (SSS) from external data instrument (WS,ARGO,CTD, XBT);;DAYD_EXT;#
 #;SSPS_EXT_QC;'DAYD_EXT';byte;SEA SURFACE SALINITY FROM EXTERNAL DATA QUALITY FLAG;;;;0;9;%1d;;;;;Quality flag applied on external sea surface salinity data values;0;DAYD_EXT;#
 #;SSPS_EXT_TYPE;'DAYD_EXT','STRING4';char;TYPE OF EXTERNAL SEA SURFACE SALINITY DATA ORIGIN;;;;;;;;;;;WS (Water Sample),ARGO,CTD,XBT,...;;DAYD_EXT;#
-#;SSPS_EXT_ANALDATE;'DAYD_EXT','STRING14';char;DATE OF WATER SAMPLE SURFACE SALINITY ANALYSIS;;;yyyymmddhhmmss;;;;;;;;Date of sea surface salinity water sample analysis;;DAYD_EXT;#
+#;SSPS_EXT_ANALDATE;'DAYD_EXT','STRING14';char;DATE OF WATER SAMPLE SURFACE SALINITY ANALYSIS;;;yyyymmddHHMMSS;;;;;;;;Date of sea surface salinity water sample analysis;;DAYD_EXT;#
 #;SSPS_EXT_BOTTLE;'DAYD_EXT','STRING4';char;SEA SURFACE SALINITY BOTTLE NUMBER;;;;;;;;;;;Number of sea surface salinity water sample;;DAYD_EXT;#
 %
 $ATTRIBUTES$
@@ -96,25 +96,25 @@ $ATTRIBUTES$
 #;PROJECT_NAME;PROJECT NAME:;;popupmenu;ORE-SSS|CORIOLIS|IRD|SISMER|SURVOSRAL|TSG_Recherche;1;0.1;0.02;;right;Name of project which operates the TSG line, ex: ORE-SSS;#
 #;SHIP_CALL_SIGN;SHIP CALL SIGN:;;edit;;;;;;right;Ship call sign;#
 #;SHIP_MMSI;SHIP MMSI:;;edit;;;;;;right;Ship MMSI (ASN) number;#
-#;DATE_TSG;TSG INSTALL DATE;;edit;;;;;;right;TSG installation date;#
+#;DATE_TSG;TSG INSTALL DATE;;edit;;;;;;right;TSG installation date, format: yyyymmdd;#
 #;TYPE_TSG;TYPE TSG:;;popupmenu;SBE21|SBE45|UNKNO;1;0.1;0.02;;right;Thermosalinograph model number;#
 #;NUMBER_TSG;NUMBER TSG:;;edit;;;;;;right;TSG serial number;#
-#;DATE_TINT;TINT INSTALL DATE;;edit;;;;;;right;TINT installation date;#
+#;DATE_TINT;TINT INSTALL DATE;;edit;;;;;;right;TINT installation date, format: yyyymmdd;#
 #;TYPE_TINT;TYPE TINT:;;popupmenu;SBE38|SBE3S|UNKNO|NA;1;0.1;0.02;;right;External sea surface temperature sensor;#
 #;NUMBER_TINT;NUMBER TINT:;;edit;;;;;;right;External temperature sensor serial number;#
 #;DATA_TYPE;DATA TYPE:;;popupmenu;TRAJECTORY|PROFIL|TIME_SERIE;1;;;;right;Describe data type contained in file, eg: TRAJECTORY, PROFIL or TIME_SERIE;#
 #;DATA_MODE;DATA MODE:;;popupmenu;Delayed mode data|Real time data;1;0.1;0.02;;right;Indicate if the file contains real time or delayed mode data;#
 #;SAMPLING_PERIOD;SAMPLING PERIOD:;;edit;300;;0.050000001;;;right;Sampling period in seconds: 6 to 3600;#
-#;DATE_START;DATE_START:;yyyymmddhhmnss;edit;;;;;;right;Date of first measurements;#
-#;DATE_END;DATE END:;yyyymmddhhmnss;edit;;;;;;right;Date of last measurements;#
+#;DATE_START;DATE_START:;yyyymmddHHMMSS;edit;;;;;;right;Date of first measurements, format: yyyymmddHHMMSS;#
+#;DATE_END;DATE END:;yyyymmddHHMMSS;edit;;;;;;right;Date of last measurements, format: yyyymmddHHMMSS;#
 #;SOUTH_LATX;SOUTH LATX:;;edit;;;;;;right;South limit of measurements;#
 #;NORTH_LATX;NORTH LATX:;;edit;;;;;;right;North limit of measurements;#
 #;WEST_LONX;WEST LONX:;;edit;;;;;;right;West limit of measurements;#
 #;EAST_LONX;EAST LONX:;;edit;;;;;;right;East limit of measurements;#
 #;FORMAT_VERSION;FORMAT VERSION:;;popupmenu;1.6|2.0;2;0.1;0.02;;right;File format version;#
 #;CONVENTIONS;CONVENTIONS:;;popupmenu;GOSUD 1.6, CF1.4|GOSUD 2.0, CF1.4;2;0.1;0.02;;right;NetCDF file format conventions;#
-#;DATE_CREATION;DATE CREATION:;yyyymmddhhmnss;edit;;;;;;right;Date and time of file creation, format: YYYYMMDDHHMISS;#
-#;DATE_UPDATE;DATE UPDATE:;yyyymmddhhmnss;edit;;;;;;right;Date and time of file update, format: YYYYMMDDHHMISS;#
+#;DATE_CREATION;DATE CREATION:;yyyymmddHHMMSS;edit;;;;;;right;Date and time of file creation, format: yyyymmddHHMMSS;#
+#;DATE_UPDATE;DATE UPDATE:;yyyymmddHHMMSS;edit;;;;;;right;Date and time of file update,  format: yyyymmddHHMMSS;#
 #;DATA_RESTRICTIONS;DATA RESTRICTIONS:;;edit;NONE;;;;;right;Restriction on use for these data;#
 #;CITATION;CITATION:;;edit;;;;;;left;This citation should be used for publications;#
 #;COMMENT;COMMENT:;;edit;;;;;;right;;#
diff --git a/@netcdf_native/tsgqc_netcdf.xls b/@netcdf_native/tsgqc_netcdf.xls
index 2186644bd03a6d4b2bd6fc8ca78d98b42b5c7cee..f1985238454f3b396d4d1ee95da4cfd8dd8621b1 100644
GIT binary patch
delta 12261
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

delta 12359
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
T5&WM7UiGAi^QqCJZ>Rk~^cGh@

diff --git a/TSGQC_amelioration.xls b/TSGQC_amelioration.xls
index ac69762074abe3ba3064eb156382fa0365348fdc..8820a2a76098ebabfdd13c9a1077593594ea7a5a 100644
GIT binary patch
delta 7418
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
Z;V()gsTJ2=YD$}Mwzatu-?|i${ujhw1hfDE

delta 7306
zcmb7I3v^WFwcclDGMPunJDHgbNlp?7d6EYY2@f-nM5KVg4Onk|K*VqfkOv`HEyNku
zD!1=N>$cBJ1+GF>h&+a(JQEbFwOI6))_S#yrmlOr_S)XH+EuMf({KOhoS6*Cr82Yr
zIrHzmzwh6B|L+soWsmH#AHK(t`sX{J{Mz$RUeIb+{qBY@KgGR{f7L$aj~pY~!_kkD
z7TdHWZgEv=_wZ&{aDFopO+Z<Wl7(^yiVfxW4x$1)@t{Tj)J!2fX~T~1-qv|RQ~&#)
z0`~>Y&fnQSjYBR6Sd-jgd)gE)?{o)vk9&RTmBN>kUnh;6cA|H{df0JJalZ?yJE(^s
z1~t$3e4dwkviJv{0xdQAv}dn9y@1wh8qK29;tC4qr59<$J!#pzJbeQGMbiDAQR<#F
zzbAvft(n$R%^qDfz<$q-aUmG^LYmv)dPw~d*z^Pok2~%HwER}80D97L`44Gc1vQ!Z
zw5jn2Trq}Zt%=%b6Lrwt)Jq-wUlWSB*6ZZ$skzZh=_egp1@Fx91uEe6Uq*DIWB4N<
z$AEsBvZ;ax$JIV%YX3N{_K>M9%pH&U$EJ4KxLS*Od~8%<%lQzn<#036XM?$%g?X&@
zF%z5S8&7-8)HaT*{ko~`9#?y9=ASBTDK}>O_yfN?{o#y^?|Z-RCCB%aViJ$|7HWmO
z(Ek%n=Rf*uv;s+bR<RWx><0@63t`V~fqX4bh_oPw1HQmS%jS}rJYJ$9#hK5C0zNHY
zHTgim%U1#uw8_!G2A=kYD*@3ckLbRP^pH+E*$hY(r9z%bG?&t0a+MsSxmreufH3V1
z9-XKR*7CVp?lQ!dyb4u~{3%4UGBQHCBH{<j^ZA3IGum8QuT>ZpXz9L~feOZu!?T#2
z_e>eoV}1*-9{0mcK^2F~$^xcQt_p5+5ZqJXi))o@qf)|$OGatU#B4Vc<7B<uXLGuF
zZ$Yl+<mE=?NJ(y;)2*{D3udWA^|gB@>(%=FwQJkE`szfSF-Ba^pU(8%A-b$Fy6Ga$
z9wVM1;+!$!nIe`bX?kM2=?%WAqVtc@O%riojCeZVGTZPeI7X*hnJD6!iLHPse~h?Z
z8Ymbep2lnD`of~q$LLgaMPtNhH-(BRnJAXd6e@|=(NYRciq{cZ3QdmJk;@b+jn`-J
zbO@%z1!y1>0~wpp{CnGb`#QF4Y41e0vCT{6<Rofp+q8D;CVnuK1IN>;k}%Vnx;w?D
zt)sVH?5f1BrK_*^3aVLDEkP{m+R_HHb!{D6+JwzPQzNbsdDcYS>RB7Ht7l!rsh;%_
zhk8znB;)C&>B4$T`_?{b1p8nlOiDi^l7wdl%_K~y)`Uj9bc29eyAcOKIoQH5@K?6q
z*VnGM-`BILV=c_rvCTsblmtbG;!dI2k`7hdgW;M&bK-TC-?^$D7V|wS!Smt<NU(=)
zRCL{aZJWfiM)B;{E4>}-RD<1JYc$zNcfgsYy|Og8kS%>}_txGmJ1C95yGLZn@UyqG
zqwC5J%og`?5xHsp-ECd>ba!=K`6f9iwTO!7oaRCyDn83ii~5qTz^pBLdQrY^yDK&N
zM#o*L>qlq<8hE{g#0%OyiRdvrb4$@D@Zx{4X5}OHB5Zprk*hyd6P0*~&ejqA9|pmz
zGq3?-!TI(qqUW;F)pLmM^$|V4kmwRl47V*I`WLKkyH@ZAU()^CUD>qVTJF#c(QEX#
zirp8Z@0Q=367F}+rTzr%d05ym*s|40gbptsq1ALyUrp5x$iQ!W_U+p@QbM(3@y}lm
zK0FS=&#s4H9Q+H{fe()t!Hd^HAo#MYGWZhk+PE1UV;iPle0F2Ha2>WUe<s^7tnm3I
z%4hVLE?$T2EC0yWY#(MA*Z;^^Ss6e7aUHh5x`u7|>b|>l4dbhAe|;UczZu`wj%mg7
zXSVVIl$;w{IgD}zrFB*-pFx?@(8}LI`52{rb}L^*X_(W>kD^SN+sa==c?V_jyjFf{
zUJKiAY~kBb22gB`E&O?uqbSbMHvV2{1%Djs;|Jz%<Maisym7%SKCs{>{%Ao3S2opi
zds7wvuxUEK+0?{SnoD_Ab1na<c^QA$yp6xvvY6j%nZXq|E#wDLev4AGuz~MgxPsqY
zILz9jT29?|bHa_rYx5&&<Ab%1wmn4j#3Mu<yC2=YP3QgpcE6^vzU#d9TJ*hL=QQ85
z%Ji%{$k^yv>l;1uNQqYXOANe=7^w2Sh%Mv{PJ^;;VI)MBg?_~&y91S%XbmKvkOvwE
z{aRhy9>Ch~!rCvLMIl4yq~AoF_5@vZ&(ZVrGkSquq@UyKq_bGziePu1{vF?!FgY*K
z%S!IS4sWNIc<1B&tUuAqZw*!O`oZjatjpwfVGDDn)9BmW=-BIFvtuvOlmVi_V?1%_
zSw8$^_U$(6$NF!>x6>>0z^L2N%%Wv!N-lZ_zMY<LzzIX2gjkLzr^V_{{3DN1CmXhP
zeCoOIK=g)BWJjZj_6E6dDsbb!i$2A^B(fnT6X)ZyuPB+9>kei$%f93yFZOhNv@~59
zu=PMTqC}7>YiZA7uw-ebjMp6WyCd3CWthQ516f)ozj`oB%aUI{eK4<Nj&jFpAQ!-7
zs<LDX=TkU8KL~_AkjJ%;xOnP-6E}>_16et8!$>A8&?O3yFYHZnGf$=oW(t<*5<sDn
z839DJC2F9^y7&K$yB7xLXxeXi@Q^R;La&^|J{TWeuTT&*YjnMi|9@(<M%Sxq2x~Sc
za+6H|iLvTe`9F=+-x7M0BL6)c`W@~0-{Fu=IpGHTTXdVr?naNlO}feMMt@%p$LQVY
z?#ps|BcXSLeo)a%SKg1ZH1rM)y*(Uym-P27dJpJ_=?l<`gC5ZTKIXg!^zT7qIPU@b
zd&+rn8OKQBj4TZ;wn#%UQm-Pt-6X|*aTKXHfz+Eon!<%gf=wwvKTfxrXc^^C#Aa&>
z&`&~R%+?g355xjaLBRc(rnxkM`;P=xNg^IbxjFPG(Tl_Q)$wa&H5F|<Mhl>ouv5{-
zKAeM%K1)R#`@wAKob;1e*lGO!kzhj_(3@$#X^{r>S7Ycjpu1vdnR~r4bUHU44c?xv
z&><6@o`6nIK&L05Gk~}g<)+ZRH1xtSelO$Kh$lmFHt~d`HQ`LT3yWo>CA6L*&kTn&
z6=f#bXd_OyMqHUdY{1Fas!0qoi)GYi!i$agZ*+Vnyx6F+EFCYexrDnJ+?S6Io4<w^
zS;BcM&ff-UmI}=x%~GT?7A56b38Xlws?dZ~SEM2Q8l-Zr+(5HABN}uFnroxE{6W;8
zl><c-mwtmV2aO%$mdA>cWTDRG#$&!!IQYs4h%5*lrlB7V<9E%EEm|MYM+nDd<&F>N
zeX)V>gR4iOG2-{Z)uXZa{e0k9u)(jKsx{GmpnC{MaFsoOLiYR#fd+WwSTGz==xHW8
z0CYU}fdq6Q0gZPbDou^juZX9EhIU)=<biWDZe2z^d5Y5-(Rqr~8qs;{K-y~tl&ON2
zVKpz*N5{KuSo5TRf*35FYL*){J8e}L5~F50EbB}V<XtAl35-lT87LEZ<flQb!s1q?
z>DENUEgsk(SRJ1h`Ou07vk}(*E*swX-3334-p^O~G83P#5-l&tWSHiwmaVYzM@8kQ
z0uDbDY%c)%aa@;;q!a*sEH=msfIb0?rIV!ud$ro<3-Nq}cGF2ZNXO|E9fI9!)Jzpv
z_BPpyvBXSO-(0+#^z-2H%9fS1QtdE0kjeD1+8iU=3MDI2vX7)G*)Wx?Sjns{ce#?4
z$bMEkNohVz7GsNHa)PzNT58I;>*><Pf5V+HZY~K*Hg{u-q9Q?di)v81CGPApC99I{
zRI8Saa>djHjImkQD4FG+A(MHKOh$m#rY^H#v`mJC&hI}HY|zmuNAOa^NW6|tiO)P8
zof2Prb)-E$^NP6fL~uqC&|jpbCb|gd9?W-R%PRtUqZ*1uKyHeyyT!coL@+Fev<-OK
zVzgVVkUDBIl!_J7TAYf3j<0xfJeA=&4a4)<P8psXFi4HzS)w?_LMBEDIO8+9B!RP}
zHi1;!5YqY>>D{q0KS_}m^N|w)JGK&j`9wZHbTYeSvXU<`8=I^evkn@Q(U{m4oy@Xl
zQYpWEGAE}LPIjo1jW}1T&_(>uCmVRdsqEw_s$ReYCu{6}D&w7}f-}k>>!Ht?EtIJg
z$vH|=RA#h*n#}q#m0;=Aa(??%u%sNwZoHH;5>c*vlWj<l<whd-{!{tkvRJ$i#Nw?`
zSh){~pA`w%ii9LqB;-(rujH^a#_5T1R;uXa)F_;lDiUl5#mb>dMQTm`N|1KMmaQs&
z<8-j0O2KnXcvXT+RS9T$dlnyQ)m(EXczd-%%T6hcS0|vW6VTNOXqj&kkRA(2mP2Et
zO;t(C;7?9BluwN5<0G*~wYkV_vqlA+#;ea%@|X8#H`FTa&8D_iX?4`3duriP{KO)|
zv=gr&jYYhU!)Jpx)+zK%6J4j`u?Ak9ipQEcbwC?4=QRwG<ygd4YW(Ke?In`z5Q_E5
z$D1>|SDkz{Y%}=h=ADD9t-DjT5RQL$lF4p-<l6F=<3y)8IP~1ARY;U4c5OP2YmcN(
zu1RujqIvPUaczoUldf@X;yce>yyo4L*FE>4W7p-AZod2cI+y(UL(X1z^p*2pv#ULT
wH@|3I2s7=yy`Jda{v_?8mp;_C^4|W%(dJ+HHLaZQyigha)`cw^*E*8^4$tIauK)l5

diff --git a/tsg_io/readArgoLocean.m b/tsg_io/readArgoLocean.m
index bf30259..e2ebd73 100644
--- a/tsg_io/readArgoLocean.m
+++ b/tsg_io/readArgoLocean.m
@@ -74,7 +74,8 @@ argo.DAYD_EXT =  argo.DAYD_EXT + data(:,17);
 
 % Convert date in character. 
 % ------------------------------------------------------
-argo.DATE_EXT    = datestr( argo.DAYD_EXT, 'yyyymmddHHMMSS' );
+argo.DATE_EXT    = datestr( argo.DAYD_EXT,...
+                            tsg.preference.date_format_variable );
 
 argo.LONX_EXT    = data(:,  7);
 argo.LATX_EXT    = data(:,  8);
diff --git a/tsg_io/readAsciiSample.m b/tsg_io/readAsciiSample.m
index 39a09d8..6b87006 100644
--- a/tsg_io/readAsciiSample.m
+++ b/tsg_io/readAsciiSample.m
@@ -175,19 +175,9 @@ ss = double( s.(char(header(6))) );
 
 s.DAYD_EXT = datenum(yy, mm, dd, hh, mi, ss);
 
-% Convert date in character. This cannot be done using
-% the Matlab Serial Date format as there can be
-% some loss of precision.
-% The following instruction is not precise enough :
-% s.DATE_EXT = datestr( s.DAYD_EXT, 'yyyymmddHHMMSS' );
-% ------------------------------------------------------
-yy = num2str( s.(char(header(1))), '%4d' );
-mm = num2str( s.(char(header(2))), '%02d' );
-dd = num2str( s.(char(header(3))), '%02d' );
-hh = num2str( s.(char(header(4))), '%02d' );
-mi = num2str( s.(char(header(5))), '%02d' );
-ss = num2str( s.(char(header(6))), '%02d' );
-s.DATE_EXT = [yy mm dd hh mi ss];
+% Convert date using pre-defined format
+% -------------------------------------
+s.DATE_EXT = datestr(s.DAYD_EXT, tsg.preference.date_format_variable);
 
 % Check if bottle/ship colocation is OK
 % -------------------------------------
diff --git a/tsg_io/readAsciiTsg.m b/tsg_io/readAsciiTsg.m
index 511a535..69ec00f 100644
--- a/tsg_io/readAsciiTsg.m
+++ b/tsg_io/readAsciiTsg.m
@@ -128,19 +128,9 @@ ss = double( s.(char(header(6))) );
 tsg.report.tsgfile = filename;
 tsg.DAYD = datenum(yy, mm, dd, hh, mi, ss);
 
-% Convert date in character. This cannot be done using
-% the Matlab Serial Date format as there can be
-% some loss of precision.
-% The following instruction is not precise enough :
-% tsg.DATE = datestr( tsg.DAYD, 'yyyymmddHHMMSS' );
-% ------------------------------------------------------
-yy = num2str( s.(char(header(1))), '%4d' );
-mm = num2str( s.(char(header(2))), '%02d' );
-dd = num2str( s.(char(header(3))), '%02d' );
-hh = num2str( s.(char(header(4))), '%02d' );
-mi = num2str( s.(char(header(5))), '%02d' );
-ss = num2str( s.(char(header(6))), '%02d' );
-tsg.DATE = [yy mm dd hh mi ss];
+% Convert date using pre-defined format
+% -------------------------------------
+tsg.DATE = datestr( tsg.DAYD, tsg.preference.date_format_variable );
 
 nHeader = length( header );
 for i = 7 : nHeader
diff --git a/tsg_io/readTsgDataAstrolabe.m b/tsg_io/readTsgDataAstrolabe.m
index 52638a1..bc2bad5 100644
--- a/tsg_io/readTsgDataAstrolabe.m
+++ b/tsg_io/readTsgDataAstrolabe.m
@@ -119,9 +119,6 @@ clear cellData
 
 % Date (y m d h m s) in the first 4 elements in data
 % --------------------------------------------------
-% ddmmyy = char(s.(char(header(1)))) ;
-% dd = str2num(ddmmyy(:,1:2));
-% mm = str2num(ddmmyy(:,3:4));
 ddmmyy = double(s.(char(header(1)))) ;
 nn = length(ddmmyy);
 dd = repmat(NaN, [nn 1]);
@@ -144,7 +141,10 @@ ss = double( s.(char(header(4))) );
 
 tsg.report.tsgfile = filename;
 tsg.DAYD = datenum(yy, mm, dd, hh, mi, ss);
-tsg.DATE = datestr( tsg.DAYD, 'yyyymmddHHMMSS' );
+
+% Convert date using pre-defined format
+% -------------------------------------
+tsg.DATE = datestr( tsg.DAYD, tsg.preference.date_format_variable );
 
 nHeader = length( header );
 for i = 5 : nHeader
diff --git a/tsg_io/readTsgDataLabview.m b/tsg_io/readTsgDataLabview.m
index dcbf40e..8284090 100644
--- a/tsg_io/readTsgDataLabview.m
+++ b/tsg_io/readTsgDataLabview.m
@@ -165,7 +165,8 @@ if fid ~= -1
 
       % Save original data. If date or time are incorrect data are deleted
       % ------------------------------------------------------------------
-      tsg.DATE       = deblank( datestr(  tsg.DAYD, 'yyyymmddHHMMSS' ) );
+      tsg.DATE       = deblank( datestr(tsg.DAYD,...
+                                tsg.preference.date_format_variable) );
       tsg.LATX       = lat(noNaN);
       tsg.LONX       = lon(noNaN);
       tsg.SSJT       = sst(noNaN);
diff --git a/tsg_io/readTsgDataNetCDF.m b/tsg_io/readTsgDataNetCDF.m
index e934bf0..98a578f 100644
--- a/tsg_io/readTsgDataNetCDF.m
+++ b/tsg_io/readTsgDataNetCDF.m
@@ -120,6 +120,12 @@ automaticQC( hMainFig )
         tsg.(variable) = julianToDatenum(tsg.(variable));
       end
       
+      % save in tsg structure attribute conventions for DATE viariables
+      % ---------------------------------------------------------------
+      if strmatch('DATE', variable)
+        tsg.conventions.(variable) = nv.conventions(:);
+      end
+      
       % assign netcdf variables in base workspace
       % -----------------------------------------
       assignin('base', variable, nv(:));
@@ -183,6 +189,16 @@ automaticQC( hMainFig )
         tsg.(var) = julianToDatenum(tsg.(var));
       end
       
+      % save in tsg structure attribute conventions for DATE viariables
+      % ---------------------------------------------------------------
+      if strfind(var, 'DATE')
+        if strcmp(nc.VARIABLES.(var).conventions, 'yyyymmddhhmmss')
+          tsg.conventions.(var) = 'yyyymmddHHMMSS';
+        else
+          tsg.conventions.(var) = nc.VARIABLES.(var).conventions;
+        end
+      end
+      
       % assign variable in base workspace
       % -------------------------------------------
       assignin('base', var , tsg.(var));
diff --git a/tsg_io/readTsgDataNuka.m b/tsg_io/readTsgDataNuka.m
index 4ddc9b5..7fbdffa 100644
--- a/tsg_io/readTsgDataNuka.m
+++ b/tsg_io/readTsgDataNuka.m
@@ -98,8 +98,9 @@ end
 
 % Fill other TSG variables
 % ---------------------------------
-tsg.DATE = datestr([cellData{3} cellData{4} cellData{5} hh mm zeros(nrecords,1)],'yyyymmddHHMMSS');
-tsg.DAYD = datenum(tsg.DATE,'yyyymmddHHMMSS');
+tsg.DATE = datestr([cellData{3} cellData{4} cellData{5} hh mm zeros(nrecords,1)],...
+ tsg.preference.date_format_variable);
+tsg.DAYD = datenum(tsg.DATE, tsg.preference.date_format_variable);
 tsg.LATX = cellData{7};
 tsg.LONX = cellData{8};
 tsg.SSPS = cellData{10};
diff --git a/tsg_io/readTsgDataOracle.m b/tsg_io/readTsgDataOracle.m
index e543bfe..0dedf1a 100644
--- a/tsg_io/readTsgDataOracle.m
+++ b/tsg_io/readTsgDataOracle.m
@@ -128,8 +128,9 @@ if size(timechar,2)>5
 else
     SS = zeros(nrecords,1);
 end
-tsg.DATE = datestr([yyyy mm dd HH MM SS],'yyyymmddHHMMSS');
-tsg.DAYD = datenum(tsg.DATE,'yyyymmddHHMMSS');
+tsg.DATE = datestr([yyyy mm dd HH MM SS],...
+                   tsg.preference.date_format_variable);
+tsg.DAYD = datenum(tsg.DATE, tsg.preference.date_format_variable);
 tsg.LATX = cellData{3};
 tsg.LONX = cellData{4};
 tsg.SSJT = cellData{5};
diff --git a/tsg_io/writeAsciiSample.m b/tsg_io/writeAsciiSample.m
index 61df45d..59f10a6 100644
--- a/tsg_io/writeAsciiSample.m
+++ b/tsg_io/writeAsciiSample.m
@@ -52,17 +52,8 @@ if choice
     if nbRecords ~= 0
 
       % Use tsg.DATE_EXT to get the year, month, day, etc.
-      % This cannot be done using the Matlab Serial Date format as there can be
-      % some loss of precision.
-      % The following instruction is not precise enough :
-      % [year, month, day, hour, min, sec] = datevec( tsg.DAYD_EXT );
       % ------------------------------------------------------
-      year  = str2num( tsg.DATE_EXT(:,1:4) );
-      month = str2num( tsg.DATE_EXT(:,5:6) );
-      day   = str2num( tsg.DATE_EXT(:,7:8) );
-      hour  = str2num( tsg.DATE_EXT(:,9:10) );
-      min   = str2num( tsg.DATE_EXT(:,11:12) );
-      sec   = str2num( tsg.DATE_EXT(:,13:14) );
+      [year, month, day, hour, min, sec] = datevec( tsg.DAYD_EXT );
           
       tsg_data = [year month day hour min fix(sec) tsg.LATX_EXT tsg.LONX_EXT ];
       header = 'YEAR MNTH DAYX hh mi ss LATX_EXT LONX_EXT';
diff --git a/tsg_io/writeAsciiTsg.m b/tsg_io/writeAsciiTsg.m
index 5364faf..0a7877c 100644
--- a/tsg_io/writeAsciiTsg.m
+++ b/tsg_io/writeAsciiTsg.m
@@ -52,18 +52,15 @@ if choice
     nbRecords = length( tsg.DAYD );
     if nbRecords ~= 0
 
-      % Use tsg.DATE to get the year, month, day, etc.
-      % This cannot be done using the Matlab Serial Date format as there can be
-      % some loss of precision.
-      % The following instruction is not precise enough :
-      % [year, month, day, hour, min, sec] = datevec( tsg.DAYD );
-      % ------------------------------------------------------
-      year  = str2num( tsg.DATE(:,1:4) );
-      month = str2num( tsg.DATE(:,5:6) );
-      day   = str2num( tsg.DATE(:,7:8) );
-      hour  = str2num( tsg.DATE(:,9:10) );
-      min   = str2num( tsg.DATE(:,11:12) );
-      sec   = str2num( tsg.DATE(:,13:14) );
+      %  get the year, month, day, etc.
+      % -------------------------------
+%       year  = str2num( tsg.DATE(:,1:4) );
+%       month = str2num( tsg.DATE(:,5:6) );
+%       day   = str2num( tsg.DATE(:,7:8) );
+%       hour  = str2num( tsg.DATE(:,10:11) );
+%       min   = str2num( tsg.DATE(:,12:13) );
+%       sec   = str2num( tsg.DATE(:,14:15) );
+      [year, month, day, hour, min, sec] = datevec( tsg.DAYD );
 
       tsg_data = [year month day hour min fix(sec) tsg.LATX mod(tsg.LONX+180,360)-180 ];
       header = 'YEAR MNTH DAYX hh mi ss LATX LONX';
diff --git a/tsg_io/writeTSGDataNetCDF.m b/tsg_io/writeTSGDataNetCDF.m
index dce5aea..807da14 100644
--- a/tsg_io/writeTSGDataNetCDF.m
+++ b/tsg_io/writeTSGDataNetCDF.m
@@ -122,6 +122,7 @@ end
     % Fixed dimensions
     % ----------------
     nc('STRING256') = tsg.dim.STRING256;
+    nc('STRING16')  = tsg.dim.STRING16;
     nc('STRING14')  = tsg.dim.STRING14;
     nc('STRING8')   = tsg.dim.STRING8;
     nc('STRING4')   = tsg.dim.STRING4;
diff --git a/tsg_util/headerForm.m b/tsg_util/headerForm.m
index ad57610..807eadf 100644
--- a/tsg_util/headerForm.m
+++ b/tsg_util/headerForm.m
@@ -36,9 +36,9 @@ bottom = .95;
 inc_x  =  3 * default_length;
 inc_y  =  0.01;
 
-% get actual date
-% ---------------
-date = datestr(now,30);
+% get actual date to format
+% -------------------------
+date = datestr(now, tsg.preference.date_format_attribute);
 
 % Get an instance of dynaload objetc from file 'tsgqc_netcdf.csv'
 % -----------------------------------------------------------------
@@ -61,7 +61,7 @@ add_coeff_var = { 'SSJT_CALCOEF', 'SSJT_LINCOEF', 'CNDC_CALCOEF', ...
 
 % if tsg_platform_info.csv not exist, create it
 % ---------------------------------------------
-%existPlatform(hTsgGUI);
+existPlatform(hTsgGUI);
 
 % % check if .ini file exist in data
 % % --------------------------------
@@ -79,7 +79,8 @@ platform_info = tsg_nc('tsg_platform.csv');
 % end
 
 % header Uicontrols in a new figure
-% ---------------------------------
+% comment   'WindowStyle', 'modal', ... in debug mode
+% ---------------------------------------------------
 hHeaderFig = figure(...
   'BackingStore','off',...
   'Name', 'TSG GLOBAL ATTRIBUTES AND VARIABLES', ...
@@ -89,11 +90,10 @@ hHeaderFig = figure(...
   'Toolbar', 'none', ...
   'Tag', 'GLOBAL_ATTRIBUTES', ...
   'Visible','on',...
-  'WindowStyle', 'modal', ...
   'Units', 'normalized',...
   'Position',get(hTsgGUI,'Position'), ...
   'Color', get(0, 'DefaultUIControlBackgroundColor'));
-
+%'WindowStyle', 'modal', ...
 % bg = [0.92549 0.913725 0.847059] = get(0, 'DefaultUIControlBackgroundColor');
 
 % Iterate from each element from object nca and additional variables
@@ -144,14 +144,30 @@ for i = nca_keys
   
   % display conventions field if exist
   % ----------------------------------
-  uicontrol(...
-    'Parent', hHeaderFig, ...
-    'Units', 'normalized', ...
-    'Style', 'text', ...
-    'Fontsize', tsg.fontSize-2, ...
-    'HorizontalAlignment', 'left', ...
-    'Position', [left + 2*s.length, bottom, s.length, s.height], ...
-    'String', char(s.conventions));
+  convention = char(s.conventions);
+  name = char(s.name);
+  
+  % if attribute as a column conventions in csv file
+  % ------------------------------------------------
+  if ~isempty(convention)
+    
+    % get it
+    % ------
+    if ~isempty(strfind(name, 'DATE'))
+      convention = tsg.preference.date_format_attribute;
+    end
+    
+    % and display in text field
+    % -------------------------
+    uicontrol(...
+      'Parent', hHeaderFig, ...
+      'Units', 'normalized', ...
+      'Style', 'text', ...
+      'Fontsize', tsg.fontSize-2, ...
+      'HorizontalAlignment', 'left', ...
+      'Position', [left + 2*s.length, bottom, s.length, s.height], ...
+      'String', convention);
+  end
   
   % set dynamically uicontrol from tsg struct
   % -----------------------------------------
@@ -312,7 +328,7 @@ uiwait(hHeaderFig);
       % set tsg.DATE_UPDATE
       % -------------------
       if strcmp(key, 'DATE_UPDATE')
-        tsg.(key) = [date(1:8) date(10:15)];
+        tsg.(key) = date;
       end
       
       % if uicontrol is a popupmenu, string is cell array with all choices
@@ -608,8 +624,7 @@ uiwait(hHeaderFig);
 % additionnal coefficients variable here
 % --------------------------------------
   function add_coefficients
-    
-    
+
     % display dynamically uicontrol text over add_var list
     % ----------------------------------------------------
     for acv = add_coeff_var
@@ -630,7 +645,7 @@ uiwait(hHeaderFig);
       % loop for each value of coefficient variable
       % -------------------------------------------
       for ii=1:numel(tsg.(var))
-        
+        tsg.([var '_CONV']);
         cle = tsg.([var '_CONV'])(ii,:);
         
         % if fillValue, don't display uicontrol
diff --git a/tsg_util/netcdfTOtsgqc.m b/tsg_util/netcdfTOtsgqc.m
index da8b96f..8af9c0e 100644
--- a/tsg_util/netcdfTOtsgqc.m
+++ b/tsg_util/netcdfTOtsgqc.m
@@ -123,9 +123,9 @@ for i = 1 : nfiles
        year  = str2num(tsg.DATE(:,1:4));
        month = str2num(tsg.DATE(:,5:6));
        day   = str2num(tsg.DATE(:,7:8));
-       hour  = str2num(tsg.DATE(:,9:10));
-       min   = str2num(tsg.DATE(:,11:12));
-       sec   = str2num(tsg.DATE(:,13:14));
+       hour  = str2num(tsg.DATE(:,10:11));
+       min   = str2num(tsg.DATE(:,12:13));
+       sec   = str2num(tsg.DATE(:,14:15));
 
       %[year, month, day, hour, min, sec] = datevec( julianToDatenum(tsg.DAYD) );
       tsg_data = [year month day hour min fix(sec) tsg.LATX mod(tsg.LONX+180,360)-180 ];
diff --git a/tsg_util/tsg_initialisation.m b/tsg_util/tsg_initialisation.m
index 12fdbfa..dd983a2 100644
--- a/tsg_util/tsg_initialisation.m
+++ b/tsg_util/tsg_initialisation.m
@@ -62,7 +62,8 @@ end
 % define netcdf dimensions
 % ------------------------
 tsg.dim.STRING256 = 256;
-tsg.dim.STRING14  = 14;
+tsg.dim.STRING16  = 16;  % use for ISO8601 date format
+tsg.dim.STRING14  = 14;  % use for oldest date format
 tsg.dim.STRING8   = 8;
 tsg.dim.STRING4   = 4;
 tsg.dim.N1        = 1;
@@ -77,9 +78,9 @@ tsg.dim.COEF_CONV_SIZE = tsg.dim.STRING8;
 % ------------------------------------------------------
 REFERENCE_DATE_TIME    = '19500101000000';
 
-% get actual date
-% ---------------
-date = datestr(now,30);
+% get actual date with ISO8601
+% ----------------------------
+date = datestr(now, 'yyyyddmmHHMMSS');
 
 % -------------------------------------------------------------------------
 %%              Levitus fields for climatology
@@ -229,9 +230,10 @@ end
 % set some fields
 % ---------------
 tsg.FORMAT_VERSION        =  NETCDF_FORMAT_VERSION;
-tsg.DATE_CREATION         =  [date(1:8) date(10:15)];
+tsg.DATE_CREATION         =  date;
 tsg.DATE_UPDATE           =  tsg.DATE_CREATION;
 tsg.REFERENCE_DATE_TIME   =  REFERENCE_DATE_TIME;
+tsg.conventions           =  [];
 
 % Save tsg structure
 % ------------------
diff --git a/tsg_util/tsg_preferences.m b/tsg_util/tsg_preferences.m
index b7b2dbe..a7d77cd 100644
--- a/tsg_util/tsg_preferences.m
+++ b/tsg_util/tsg_preferences.m
@@ -153,8 +153,12 @@ set(hTsgGUI,'Pointer','arrow');
     preference.ssjt_max_string       = {'40'};
     preference.sstp_min_string       = {'-3'};
     preference.sstp_max_string       = {'40'};
-    preference.date_format_variable  = {'yyyyMMddHHmmss'};
-    preference.date_format_attribute = {'yyyy-MM-ddTHH:mm:ssZ'};
+    
+    % according with tsg_netcdf.xls file
+    % change version number or delete tsgqc.mat
+    % -----------------------------------------
+    preference.date_format_variable  = 'yyyymmddHHMMSS';
+    preference.date_format_attribute = 'yyyymmddHHMMSS';
     
     % save preference struct to 'prefdir.mat' file
     % ---------------------------------------------
diff --git a/tsg_util/updateTsgStruct.m b/tsg_util/updateTsgStruct.m
index 6118554..fc31f61 100644
--- a/tsg_util/updateTsgStruct.m
+++ b/tsg_util/updateTsgStruct.m
@@ -61,11 +61,43 @@ else
 end
 
 % get date start and end value and set to globals attributes
-% -----------------------------------------------------------------
-date           = datestr(min(tsg.DAYD), 30);
-tsg.DATE_START = [date(1:8) date(10:15)];
-date           = datestr(max(tsg.DAYD), 30);
-tsg.DATE_END   = [date(1:8) date(10:15)];
+% by default db-oceano use this format yyyymmddHHMMSS
+% ----------------------------------------------------------
+tsg.DATE_START    = datestr(min(tsg.DAYD), tsg.preference.date_format_attribute);
+tsg.DATE_END      = datestr(max(tsg.DAYD), tsg.preference.date_format_attribute);
+
+% if date is in standard format, change, if not, user need to update
+% inside headerform
+% ------------------------------------------------------------------
+if size(tsg.DATE, 2) == 14
+  tsg.DATE_CREATION = datestr(datenum(tsg.DATE_CREATION, ...
+    'yyyyddmmHHMMSS'), tsg.preference.date_format_attribute);
+end
+if size(tsg.DATE, 2) == 14
+  tsg.DATE_UPDATE = datestr(datenum(tsg.DATE_UPDATE, ...
+    'yyyyddmmHHMMSS'), tsg.preference.date_format_attribute);
+end
+    
+% update tsg.xxx_DATE_xxx with new or ISO8601 format if necessary
+% conventions for variables are saved in tsg.conventions structure
+% see updateTsgStruct.m
+% ----------------------------------------------------------------
+if ~isempty(tsg.REFERENCE_DATE_TIME) && ~isempty(tsg.conventions)
+  tsg.REFERENCE_DATE_TIME = datestr(datenum(tsg.REFERENCE_DATE_TIME,...
+    tsg.conventions.REFERENCE_DATE_TIME), tsg.preference.date_format_variable);
+end
+if ~isempty(tsg.DATE) && ~isempty(tsg.conventions)
+  tsg.DATE = datestr(datenum(tsg.DATE, ...
+    tsg.conventions.DATE), tsg.preference.date_format_variable);
+end
+if ~isempty(tsg.DATE_EXT) && ~isempty(tsg.conventions)
+  tsg.DATE_EXT = datestr(datenum(tsg.DATE_EXT, ...
+     tsg.conventions.DATE_EXT), tsg.preference.date_format_variable);
+end
+if ~isempty(tsg.SSPS_EXT_ANALDATE) && ~isempty(tsg.conventions)
+  tsg.SSPS_EXT_ANALDATE = datestr(datenum(tsg.DATE_EXT, ...
+     tsg.conventions.SSPS_EXT_ANALDATE), tsg.preference.date_format_variable);
+end
 
 % Variables must exists
 % ---------------------
@@ -112,6 +144,21 @@ end
 % ------------------
 setappdata( hMainFig, 'tsg_data', tsg);
 
+% reset calibration coefficients for this not comptatible version
+% ---------------------------------------------------------------
+if strcmp(tsg.FORMAT_VERSION, '1.4')
+  tsg.SSJT_CALCOEF = [];
+  tsg.CNDC_CALCOEF = [];
+  tsg.SSTP_CALCOEF = [];
+  tsg.SSJT_LINCOEF = [];
+  tsg.CNDC_LINCOEF = [];
+  tsg.SSTP_LINCOEF = [];
+  
+  % Save tsg structure
+  % ------------------
+  setappdata( hMainFig, 'tsg_data', tsg);
+end
+ 
 % fill tsg calibration variables
 % ------------------------------
 updateTsgStructWithCalCoeff(hMainFig);
diff --git a/tsgqc.m b/tsgqc.m
index 5a09877..e947e5d 100644
--- a/tsgqc.m
+++ b/tsgqc.m
@@ -37,8 +37,8 @@ global NETCDF_FORMAT_VERSION
 % version number, may be used to initialize some files when it change
 % 0.90x -> 1.0RCx
 % -------------------------------------------------------------------
-VERSION = 1.3;  % -> 1.3
-CHAR_VERSION = '1.3';
+VERSION = 1.22;  % -> 1.3
+CHAR_VERSION = '1.22';
 
 % netcdf file version, see DATA FORMAT TSG document:
 % CORTSG_format_gosud_1.5.doc
-- 
GitLab