blob: c033aee9ef88c6faee70a2c6a2d30911d0f5dae6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "XalanDateTime.hpp"
#include "XalanDuration.hpp"
#include "XalanDateTimeMath.hpp"
#include "XalanDateTimeFunctions.hpp"
#include "XalanDateTimeExceptions.hpp"
XALAN_CPP_NAMESPACE_USE
XObjectPtr
XalanDTOptionalParameterFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const LocatorType * locator) const
{
XalanDOMString theArgument(XalanDateTime::fromSystem(DATE_TIME)->toString());
return execute(executionContext,
context,
executionContext.getXObjectFactory().createString(theArgument),
locator);
}
XalanDTAddFunction::XalanDTAddFunction()
: XalanDateTimeFunction()
{
}
XalanDTAddFunction::~XalanDTAddFunction()
{
}
XObjectPtr
XalanDTAddFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType * locator) const
{
XalanDateTime * dateTime;
try
{
dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg1->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
}
catch (XalanInvalidDateTime & xidt)
{
// TODO Report error
}
XalanDuration * duration;
try
{
duration = XalanDuration::fromString(
TranscodeToLocalCodePage(arg2->str()).begin());
}
catch (XalanInvalidDuration & xid)
{
// TODO Report error
}
dateTime->addDuration(duration);
XalanDOMString theResult(dateTime->toString());
delete dateTime;
delete duration;
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTAddDurationFunction::XalanDTAddDurationFunction()
: XalanDateTimeFunction()
{
}
XalanDTAddDurationFunction::~XalanDTAddDurationFunction()
{
}
XObjectPtr
XalanDTAddDurationFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType * locator) const
{
XalanDuration * fDuration;
XalanDuration * sDuration;
char * rDuration;
try
{
fDuration = XalanDuration::fromString(
TranscodeToLocalCodePage(arg1->str()).begin());
sDuration = XalanDuration::fromString(
TranscodeToLocalCodePage(arg2->str()).begin());
fDuration->add(sDuration);
rDuration = fDuration->toString();
}
catch (XalanInvalidDuration & xid)
{
rDuration = "";
}
XalanDOMString theResult(rDuration);
delete fDuration;
delete sDuration;
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDateFunction::XalanDTDateFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDateFunction::~XalanDTDateFunction()
{
}
XObjectPtr
XalanDTDateFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
char * rDate;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
dateTime->setFormatType(DATE);
rDate = dateTime->toString();
delete dateTime;
}
catch (XalanInvalidDuration & xid)
{
rDate = "";
}
XalanDOMString theResult(rDate);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDateTimeFunction::XalanDTDateTimeFunction()
: XalanDateTimeFunction()
{
}
XalanDTDateTimeFunction::~XalanDTDateTimeFunction()
{
}
XObjectPtr
XalanDTDateTimeFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const LocatorType * locator) const
{
XalanDOMString theResult(XalanDateTime::fromSystem(DATE_TIME)->toString());
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDayAbbreviationFunction::XalanDTDayAbbreviationFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayAbbreviationFunction::~XalanDTDayAbbreviationFunction()
{
}
XObjectPtr
XalanDTDayAbbreviationFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
const char * rDayAbbreviation;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
rDayAbbreviation = dateTime->getDayAbbreviation();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
rDayAbbreviation = "";
}
XalanDOMString theResult(rDayAbbreviation);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDayInMonthFunction::XalanDTDayInMonthFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayInMonthFunction::~XalanDTDayInMonthFunction()
{
}
XObjectPtr
XalanDTDayInMonthFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double dayInMonth = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_MONTH_DAY, G_DAY);
dayInMonth = dateTime->getDay();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
dayInMonth = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(dayInMonth);
}
XalanDTDayInWeekFunction::XalanDTDayInWeekFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayInWeekFunction::~XalanDTDayInWeekFunction()
{
}
XObjectPtr
XalanDTDayInWeekFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double dayInWeek = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
dayInWeek = dateTime->getDayInWeek();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
dayInWeek = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(dayInWeek);
}
XalanDTDayInYearFunction::XalanDTDayInYearFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayInYearFunction::~XalanDTDayInYearFunction()
{
}
XObjectPtr
XalanDTDayInYearFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double dayInYear = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
dayInYear = dateTime->getDayInYear();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
dayInYear = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(dayInYear);
}
XalanDTDayNameFunction::XalanDTDayNameFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayNameFunction::~XalanDTDayNameFunction()
{
}
XObjectPtr
XalanDTDayNameFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
const char * dayName;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
dayName = dateTime->getDayName();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
dayName = "";
}
XalanDOMString theResult(dayName);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDayOfWeekInMonthFunction::XalanDTDayOfWeekInMonthFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTDayOfWeekInMonthFunction::~XalanDTDayOfWeekInMonthFunction()
{
}
XObjectPtr
XalanDTDayOfWeekInMonthFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double dayOfWeekInMonth = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
dayOfWeekInMonth = dateTime->getDayOfWeekInMonth();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
dayOfWeekInMonth = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(dayOfWeekInMonth);
}
XalanDTDifferenceFunction::XalanDTDifferenceFunction()
: XalanDateTimeFunction()
{
}
XalanDTDifferenceFunction::~XalanDTDifferenceFunction()
{
}
XObjectPtr
XalanDTDifferenceFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType * locator) const
{
XalanDateTime * fDateTime;
XalanDateTime * sDateTime;
char * rDuration;
try
{
fDateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg1->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
sDateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg2->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
XalanDuration * duration = fDateTime->difference(sDateTime);
duration->setFormatType(
(fDateTime->getFormatType() == G_YEAR_MONTH
|| sDateTime->getFormatType() == G_YEAR_MONTH
|| fDateTime->getFormatType() == G_YEAR
|| sDateTime->getFormatType() == G_YEAR)
? YEAR_MONTH : DAY_AND_TIME);
duration->normalizeAttributes();
rDuration = duration->toString();
delete duration;
}
catch (XalanInvalidDateTime & xidt)
{
rDuration = "";
}
delete fDateTime;
delete sDateTime;
XalanDOMString theResult(rDuration);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTDurationFunction::XalanDTDurationFunction()
: XalanDateTimeFunction()
{
}
XalanDTDurationFunction::~XalanDTDurationFunction()
{
}
XObjectPtr
XalanDTDurationFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const LocatorType * locator) const
{
XalanDTSecondsFunction * dtSecondsFunction = new XalanDTSecondsFunction();
XObjectPtr secondsObject = ((XalanDTOptionalParameterFunction *) dtSecondsFunction)->execute(
executionContext,
context,
locator);
delete dtSecondsFunction;
return XalanDTDurationFunction::execute(
executionContext,
context,
secondsObject,
locator);
}
XObjectPtr
XalanDTDurationFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
XalanDuration * duration;
char * rDuration;
try
{
duration = new XalanDuration(0, 0, 0, 0, 0, arg->num());
duration->setFormatType(DAY_AND_TIME);
duration->normalizeAttributes();
rDuration = duration->toString();
delete duration;
}
catch (XalanInvalidDateTime & xidt)
{
rDuration = "";
}
delete duration;
XalanDOMString theResult(rDuration);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTFormatDateFunction::XalanDTFormatDateFunction()
: XalanDateTimeFunction()
{
}
XalanDTFormatDateFunction::~XalanDTFormatDateFunction()
{
}
XObjectPtr
XalanDTFormatDateFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType * locator) const
{
return XObjectPtr(0);
}
XalanDTHourInDayFunction::XalanDTHourInDayFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTHourInDayFunction::~XalanDTHourInDayFunction()
{
}
XObjectPtr
XalanDTHourInDayFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double hourInDay = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, TIME);
hourInDay = dateTime->getHours();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
hourInDay = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(hourInDay);
}
XalanDTLeapYearFunction::XalanDTLeapYearFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTLeapYearFunction::~XalanDTLeapYearFunction()
{
}
XObjectPtr
XalanDTLeapYearFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
bool leapYear = false;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
leapYear = XalanDateTimeMath::isLeapYear(dateTime->getYear());
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
return executionContext.getXObjectFactory().createNumber(XalanDateTimeMath::NAN);
}
return executionContext.getXObjectFactory().createBoolean(leapYear);
}
XalanDTMinuteInHourFunction::XalanDTMinuteInHourFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTMinuteInHourFunction::~XalanDTMinuteInHourFunction()
{
}
XObjectPtr
XalanDTMinuteInHourFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double minuteInHour = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, TIME);
minuteInHour = dateTime->getMinutes();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
minuteInHour = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(minuteInHour);
}
XalanDTMonthAbbreviationFunction::XalanDTMonthAbbreviationFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTMonthAbbreviationFunction::~XalanDTMonthAbbreviationFunction()
{
}
XObjectPtr
XalanDTMonthAbbreviationFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
const char * monthAbbreviation;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_MONTH);
monthAbbreviation = dateTime->getMonthAbbreviation();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
monthAbbreviation = "";
}
XalanDOMString theResult(monthAbbreviation);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTMonthInYearFunction::XalanDTMonthInYearFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTMonthInYearFunction::~XalanDTMonthInYearFunction()
{
}
XObjectPtr
XalanDTMonthInYearFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double monthInYear = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH,
G_MONTH, G_MONTH_DAY);
monthInYear = dateTime->getMonth();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
monthInYear = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(monthInYear);
}
XalanDTMonthNameFunction::XalanDTMonthNameFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTMonthNameFunction::~XalanDTMonthNameFunction()
{
}
XObjectPtr
XalanDTMonthNameFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
const char * monthName;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH,
G_MONTH);
monthName = dateTime->getMonthName();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
monthName = "";
}
XalanDOMString theResult(monthName);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTParseDateFunction::XalanDTParseDateFunction()
: XalanDateTimeFunction()
{
}
XalanDTParseDateFunction::~XalanDTParseDateFunction()
{
}
XObjectPtr
XalanDTParseDateFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType * locator) const
{
return XObjectPtr(0);
}
XalanDTSecondInMinuteFunction::XalanDTSecondInMinuteFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTSecondInMinuteFunction::~XalanDTSecondInMinuteFunction()
{
}
XObjectPtr
XalanDTSecondInMinuteFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double secondInMinute = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, TIME);
secondInMinute = dateTime->getSeconds();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
secondInMinute = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(secondInMinute);
}
XalanDTSecondsFunction::XalanDTSecondsFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTSecondsFunction::~XalanDTSecondsFunction()
{
}
XObjectPtr
XalanDTSecondsFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double seconds = 0.0;
XalanDuration * duration;
XalanDateTime * dateTime;
XalanDateTime * baseDateTime;
try
{
dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
baseDateTime = XalanDateTime::fromString(
"1970-01-01T00:00:00Z", DATE_TIME);
duration = dateTime->difference(baseDateTime);
}
catch (XalanInvalidDateTime & xidt)
{
try
{
duration = XalanDuration::fromString(
TranscodeToLocalCodePage(arg->str()).begin());
if (duration->getYear() + duration->getMonth())
{
throw XalanInvalidDuration();
}
}
catch (XalanInvalidDuration & xid)
{
return executionContext.getXObjectFactory().
createNumber(XalanDateTimeMath::NAN);
}
}
seconds = duration->getTotalOfSeconds();
delete duration;
delete dateTime;
delete baseDateTime;
return executionContext.getXObjectFactory().createNumber(seconds);
}
XalanDTSumFunction::XalanDTSumFunction()
: XalanDateTimeFunction()
{
}
XalanDTSumFunction::~XalanDTSumFunction()
{
}
XObjectPtr
XalanDTSumFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectArgVectorType & args,
const LocatorType* locator) const
{
const XObjectArgVectorType::size_type theArgCount = args.size();
char * rDuration;
if (theArgCount != 0)
{
XalanDuration * fDuration;
XalanDuration * sDuration;
try
{
fDuration = XalanDuration::fromString(
TranscodeToLocalCodePage(args[0]->str()).begin());
for (int iArg = 1; iArg < theArgCount; iArg ++)
{
fDuration->add(sDuration = XalanDuration::fromString(
TranscodeToLocalCodePage(args[iArg]->str()).begin()));
delete sDuration;
}
rDuration = fDuration->toString();
}
catch (XalanInvalidDuration & xid)
{
rDuration = "";
}
delete fDuration;
delete sDuration;
}
else
{
rDuration = "";
}
XalanDOMString theResult(rDuration);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTTimeFunction::XalanDTTimeFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTTimeFunction::~XalanDTTimeFunction()
{
}
XObjectPtr
XalanDTTimeFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
char * rTime;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, TIME);
dateTime->setFormatType(TIME);
rTime = dateTime->toString();
delete dateTime;
}
catch (XalanInvalidDuration & xid)
{
rTime = "";
}
XalanDOMString theResult(rTime);
return executionContext.getXObjectFactory().createString(theResult);
}
XalanDTWeekInMonthFunction::XalanDTWeekInMonthFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTWeekInMonthFunction::~XalanDTWeekInMonthFunction()
{
}
XObjectPtr
XalanDTWeekInMonthFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double weekInMonth = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
weekInMonth = dateTime->getWeekInMonth();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
weekInMonth = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(weekInMonth);
}
XalanDTWeekInYearFunction::XalanDTWeekInYearFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTWeekInYearFunction::~XalanDTWeekInYearFunction()
{
}
XObjectPtr
XalanDTWeekInYearFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double weekInYear = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE);
weekInYear = dateTime->getWeekInYear();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
weekInYear = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(weekInYear);
}
XalanDTYearFunction::XalanDTYearFunction()
: XalanDTOptionalParameterFunction()
{
}
XalanDTYearFunction::~XalanDTYearFunction()
{
}
XObjectPtr
XalanDTYearFunction::execute(
XPathExecutionContext & executionContext,
XalanNode * context,
const XObjectPtr arg,
const LocatorType * locator) const
{
double year = 0.0;
try
{
XalanDateTime * dateTime = XalanDateTime::fromString(
TranscodeToLocalCodePage(arg->str()).begin(),
DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR);
year = dateTime->getYear();
delete dateTime;
}
catch (XalanInvalidDateTime & xidt)
{
year = XalanDateTimeMath::NAN;
}
return executionContext.getXObjectFactory().createNumber(year);
}