Tech Blog

Understanding the BizTalk Mapper: Part 6 – Date/Time Functoids

XSLT v1.0 has no support for Date/Time values, whilst XSLT v2.0 has full support.
Therefore it’s not surprising that your only option is to use C#’s rich support for
Date/Time values.
And this is why all of the functoids in this category emit inline C#.

For each functoid I’ve shown:

  1. Whether XSLT or C# is emitted
  2. Whether an XSLT equivalent exists
  3. The XSLT or C# emitted by the functoid
  4. Where C# is emitted, the equivalent XSLT to achieve the same functionality (in both
    XSLT v1.0 and v2.0)

Functoids covered in this category:

Add Days Time
Date Common Code
Date and Time  

Note:

This is the sixth in a series of 13 posts about the BizTalk Mapper.
The other posts in this series are (links will become active as the posts become active):
Understanding
the BizTalk Mapper: Part 1 – Introduction


Understanding
the BizTalk Mapper: Part 2 – Functoids Overview


Understanding
the BizTalk Mapper: Part 3 – String Functoids


Understanding
the BizTalk Mapper: Part 4 – Mathematical Functoids


Understanding
the BizTalk Mapper: Part 5 – Logical Functoids


Understanding the BizTalk Mapper: Part 6 – Date/Time Functoids

Understanding
the BizTalk Mapper: Part 7 – Conversion Functoids


Understanding
the BizTalk Mapper: Part 8 – Scientific Functoids


Understanding
the BizTalk Mapper: Part 9 – Cumulative Functoids


Understanding
the BizTalk Mapper: Part 10 – Database Functoids


Understanding
the BizTalk Mapper: Part 11 – Advanced Functoids


Understanding
the BizTalk Mapper: Part 12 – Performance and Maintainability


Understanding
the BizTalk Mapper: Part 13 – Is the Mapper the best choice for Transformation in
BizTalk?

Download the complete series as a single Microsoft
Word document (1.2MB)
or Adobe
PDF document (620kb)
.

Date/Time Functoids

Note: XSLT 1.0 has no built-in Date/Time functions, whereas
XSLT 2.0/XPath 2.0 does.

 

Add Days

 

 

Generates: C#

Has XSLT Equivalent: in 2.0 only

  Emitted Code:

public string DateAddDays(string date, string days)

{

    string retval
= “”;


    double db
= 0;


    if (IsDate(date)
&& IsNumeric(days, ref db))


    {

       
DateTime dt = DateTime.Parse(date);


        int d
= (int)db;


       
dt = dt.AddDays(d);


       
retval = dt.ToString(“yyyy-MM-dd”, System.Globalization.CultureInfo.InvariantCulture);


    }

    return retval;

}
 

XSLT 1.0 Equivalent: (none)

  XSLT 2.0 Equivalent: xs:dateTime(‘2007-12-12’) + xdt:dayTimeDuration(‘PxD’)

Where x (in dayTimeDuration()) is number of days to add e.g. 5 days would be
‘P5D’
 

 

Date

 

 

Generates: C#

Has XSLT Equivalent: in 2.0 only

  Emitted Code:

public string DateCurrentDate()

{

    DateTime dt = DateTime.Now;

    return dt.ToString(“yyyy-MM-dd”,
System.Globalization.CultureInfo.InvariantCulture);


}
 

XSLT 1.0 Equivalent: (none)

 

XSLT 2.0 Equivalent: fn:current-date()

 

 

Date and Time

 

 

Generates: C#

Has XSLT Equivalent: in 2.0 only

  Emitted Code:

public string DateCurrentDateTime()

{

    DateTime dt = DateTime.Now;

    string curdate
= dt.ToString(“yyyy-MM-dd”, System.Globalization.CultureInfo.InvariantCulture);


    string curtime
= dt.ToString(“T”, System.Globalization.CultureInfo.InvariantCulture);


    string retval
= curdate + “T” + curtime;


    return retval;

}
 

XSLT 1.0 Equivalent: (none)

 

XSLT 2.0 Equivalent: fn:current-dateTime()

 

 

Time

 

 

Generates: C#

Has XSLT Equivalent: in 2.0 only

  Emitted Code:

public string DateCurrentTime()

{

    DateTime dt = DateTime.Now;

    return dt.ToString(“T”,
System.Globalization.CultureInfo.InvariantCulture);


}
 

XSLT 1.0 Equivalent: (none)

 

XSLT 2.0 Equivalent: fn:current-date()

   
  Common Code

(this is common code used by all the date/time functoids)
  public bool IsNumeric(string val)

{

    if (val
== null)


    {

        return false;

    }

    double d
= 0;


    return Double.TryParse(val,
System.Globalization.NumberStyles.AllowThousands
| System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);


}

 

public bool IsNumeric(string val, ref double d)

{

    if (val
== null)


    {

        return false;

    }

    return Double.TryParse(val,
System.Globalization.NumberStyles.AllowThousands
| System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);


}

 

public bool IsDate(string val)

{

    bool retval
= true;


    try

    {

       
DateTime dt = Convert.ToDateTime(val, System.Globalization.CultureInfo.InvariantCulture);


    }

    catch (Exception)

    {

       
retval = false;


    }

    return retval;

}

Back to Tech Blog