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:
- Whether XSLT or C# is emitted
- Whether an XSLT equivalent exists
- The XSLT or C# emitted by the functoid
-
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 |
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?
When all of the above have been posted, the entire series will be downloadable as
a single Microsoft Word document, or Adobe PDF file.
Date/Time Functoids |
||
Note: XSLT 1.0 has no built-in Date/Time functions, whereas |
||
|
|
|
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’ |
||
|
|
|
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() |
||
|
|
|
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() |
||
|
|
|
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; } |