Corrected the interpretation of user supplied ECMA-119 timestamp strings
This commit is contained in:
@ -457,14 +457,20 @@ ex:
|
||||
|
||||
|
||||
int Decode_ecma119_format(struct tm *erg, char *text, int flag)
|
||||
/* YYYYMMDDhhmmsscc */
|
||||
/* YYYYMMDDhhmmsscc[LOC] */
|
||||
/* 2010040711405800 */
|
||||
{
|
||||
int i, l, num;
|
||||
int i, l, num, utc= 1;
|
||||
|
||||
memset(erg, 0, sizeof(*erg));
|
||||
erg->tm_isdst= -1;
|
||||
l= strlen(text);
|
||||
if(l == 19) {
|
||||
if(strcmp(text + 16, "LOC") != 0)
|
||||
return(0);
|
||||
utc= 0;
|
||||
l= 16;
|
||||
}
|
||||
if(l != 16)
|
||||
return(0);
|
||||
for(i= 0; i < l; i++)
|
||||
@ -491,7 +497,7 @@ int Decode_ecma119_format(struct tm *erg, char *text, int flag)
|
||||
erg->tm_sec= 10*(text[12]-'0')+text[13]-'0';
|
||||
if(erg->tm_sec > 59)
|
||||
return(0);
|
||||
return(1);
|
||||
return(1 + !utc);
|
||||
}
|
||||
|
||||
|
||||
@ -575,7 +581,7 @@ time_t Decode_timestring(char *code, time_t *date, int flag)
|
||||
char scale_chr;
|
||||
double value,seconds;
|
||||
struct tm result_tm;
|
||||
int seconds_valid= 0;
|
||||
int seconds_valid= 0, ret;
|
||||
|
||||
*date= 0;
|
||||
if(code[0]=='-' || code[0]=='+' || code[0]=='=' || code[0]=='@'){
|
||||
@ -627,10 +633,21 @@ time_t Decode_timestring(char *code, time_t *date, int flag)
|
||||
seconds= mktime(&result_tm);
|
||||
seconds_valid= 1;
|
||||
goto completed;
|
||||
} else if(Decode_ecma119_format(&result_tm, code, 0)>0) {
|
||||
/* YYYYMMDDhhmmsscc */
|
||||
/* 2010040711405800 */
|
||||
} else if((ret= Decode_ecma119_format(&result_tm, code, 0)) > 0) {
|
||||
/* YYYYMMDDhhmmsscc[UTC] */
|
||||
/* 2010040711405800UTC */
|
||||
seconds= mktime(&result_tm);
|
||||
if(ret == 1) {
|
||||
|
||||
#ifdef HAVE_TM_GMTOFF
|
||||
seconds+= result_tm.tm_gmtoff;
|
||||
#else
|
||||
if(result_tm.tm_isdst < 0)
|
||||
result_tm.tm_isdst = 0;
|
||||
seconds-= timezone - result_tm.tm_isdst * 3600;
|
||||
#endif
|
||||
|
||||
}
|
||||
seconds_valid= 1;
|
||||
goto completed;
|
||||
}
|
||||
|
Reference in New Issue
Block a user