【发布时间】:2018-04-13 09:56:23
【问题描述】:
地图的先前工作版本:
在这个版本中,输入数据的类型是 xs:date
地图的目标版本:
在这个版本中,我将平面文件中的数据类型更改为 xs:string。我还添加了新地图中突出显示的以下 C# 脚本:
public static System.DateTime MyConcat(string param1)
{
string[] formats = { "yyyy\\/MM\\/dd", "dd-MM-yyyy","yyyy-MM-dd", "dd\\/MM\\/yyyy" };
return System.DateTime.ParseExact(param1, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
}
我将字符串“2018-03-15”传递给数据输入。
我得到的错误:
ABC.MW.BackEnds.CENTRAL.DocsInformacaoFinanceira.Balancete.Mappers.MapBalancete。错误:转换失败.. ---> System.Reflection.TargetInvocationException:调用目标已引发异常。 ---> System.Xml.Xsl.XslTransformException:调用扩展函数“DateFormat”时出错。有关错误的完整描述,请参阅 InnerException。 ---> System.FormatException:字符串未被识别为有效的日期时间。 at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
从错误中我推断出问题是从字符串到日期时间的隐式转换。但我不知道它可能发生在哪里。
我找到了错误的根源。这是之前工作函数中的 scriptoid 调用的方法。
我假设 xs:date 和我的 scriptoid 返回的不是一回事。
给出错误的函数代码:
public string DateFormat(string value, string FormatoOrigem, string FormatoDestino)
{
DateTime myDate;
if (string.IsNullOrEmpty(value))
return ""; //myDate = DateTime.MinValue;
else
myDate = System.DateTime.ParseExact(value,
FormatoOrigem,
System.Globalization.CultureInfo.InvariantCulture);
return myDate.ToString(FormatoDestino, System.Globalization.CultureInfo.InvariantCulture);
}
调用函数的脚本输入:
【问题讨论】:
-
ParseExact has an overload 采用字符串格式数组。你不需要那一系列丑陋的 if。
-
您没有显示价值是什么,这很难提供帮助。为什么不为您首先尝试转换的值添加一些日志记录? (话虽如此,堆栈跟踪中没有任何内容显示您的方法,因此不清楚它是否被调用...)
-
@Steve 谢谢。我更改并更新了答案
-
@DaisyShipton 我现在添加了它。该错误与“2018-03-15”有关。但我也尝试了 15-03-2018 并得到了同样的错误。
-
那么您希望您的方法如何被调用?目前我没有看到任何证据表明它正在被调用。