You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by dm...@apache.org on 2004/03/10 20:55:31 UTC
cvs commit: xml-xalan/c/src/xalanc/XalanEXSLT XalanEXSLTDateTime.cpp
dmitryh 2004/03/10 11:55:31
Modified: c/src/xalanc/XalanEXSLT XalanEXSLTDateTime.cpp
Log:
Fix for Bugzilla#27365
Revision Changes Path
1.5 +50 -22 xml-xalan/c/src/xalanc/XalanEXSLT/XalanEXSLTDateTime.cpp
Index: XalanEXSLTDateTime.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XalanEXSLT/XalanEXSLTDateTime.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanEXSLTDateTime.cpp 26 Feb 2004 23:01:37 -0000 1.4
+++ XalanEXSLTDateTime.cpp 10 Mar 2004 19:55:31 -0000 1.5
@@ -112,6 +112,8 @@
XPathExecutionContext::GetAndReleaseCachedString theGuard(executionContext);
XalanDOMString& theResult = theGuard.get();
+
+ theResult.clear();
#if defined(XALAN_STRICT_ANSI_HEADERS)
using std::localtime;
@@ -129,34 +131,60 @@
const struct tm* strctTime = localtime(&long_time);
- assert (strctTime != 0 );
-
- //save hours - the struct going to be overrided
- const int iHours = strctTime->tm_hour;
-
- const size_t MAX_DATE_TIME_LEN = 1000;
-
- char stringTime[MAX_DATE_TIME_LEN + 1];
-
- const size_t result = strftime(stringTime, MAX_DATE_TIME_LEN, "%Y-%m-%dT%H:%M:%S", strctTime);
-
- if (result == 0)
+ if (strctTime != 0 )
{
- theResult.clear();
- }
- else
- {
- // Microsoft doesn't fully support the strftime definition. Let's complete the job manually
+ // save local time value
+ struct tm localTime = *strctTime;
+
strctTime = gmtime(&long_time);
- assert (strctTime != 0 );
+ if(strctTime != 0 )
+ {
- char timeZone[MAX_DATE_TIME_LEN+1];
+ const size_t MAX_DATE_TIME_LEN = 1000;
+ char stringTime[MAX_DATE_TIME_LEN + 1];
- sprintf(timeZone , "%2.2d:00", iHours - strctTime->tm_hour);
+ const size_t result = strftime(stringTime, MAX_DATE_TIME_LEN, "%Y-%m-%dT%H:%M:%S", strctTime);
- theResult.assign(stringTime);
- theResult.append(timeZone);
+ if (result != 0)
+ {
+ theResult.assign(stringTime);
+
+ long localData = localTime.tm_year * 10000 + localTime.tm_mon * 100 + localTime.tm_mday;
+ long gmtData = strctTime->tm_year * 10000 + strctTime->tm_mon * 100 + strctTime->tm_mday;
+
+ char timeZone[MAX_DATE_TIME_LEN+1];
+
+ int offset = 0;
+
+ if( localData == gmtData )
+ {
+ if(localTime.tm_hour == strctTime->tm_hour)
+ {
+ offset = 100; // much bigger then any legal offset
+ }
+ else
+ {
+ offset = localTime.tm_hour - strctTime->tm_hour;
+ }
+ }
+ else if(localData < gmtData)
+ {
+ offset = localTime.tm_hour - strctTime->tm_hour - 24;
+ }
+ else
+ {
+ offset = localTime.tm_hour - strctTime->tm_hour + 24;
+ }
+
+ if(offset == 100)
+ sprintf(timeZone , "%s", "z");
+ else
+ sprintf(timeZone , "%2.2d:00",offset);
+
+ theResult.append(timeZone);
+ }
+ }
}
return executionContext.getXObjectFactory().createString(theResult);
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org