尝试使用SAP RFC转换日期时间格式时出现问题。
我正在尝试这个:
string tmpDate = argDate.ToString("dd.MM.yyyy");
DateTime date = Convert.ToDateTime(tmpDate);
IRfcFunction SAPRateAPI = null;
SAPRateAPI = _ecc.Repository.CreateFunction("ZRFC_CUST_CONDITION_RATE");
SAPRateAPI = CreateSAPRateAPI(SAPRateAPI, argPartnerSAPTranCode, argCustSAPTranCode, argMaterialCode, date);
SAPRateAPI.Invoke(_ecc);
但是收到错误' Specified Cast无效'
答案 0 :(得分:2)
C#中的DateTime有自己的表示,并且没有任何"格式"你可以看到或改变。
所以短语"日期时间采用dd.mm.yyyy格式"没有任何意义。
让我们看看您的代码:
string tmpDate = argDate.ToString("dd.MM.yyyy");
DateTime date = Convert.ToDateTime(tmpDate);
您需要将DateTime
转换为string
,然后再转回DateTime
。
由于Convert
使用了您指定的Windows文化,并且它与字符串中的字符不同,您在反向转换中获得异常 - 您需要DateTime.ParseExact
和显式格式规范
但是即使这个演员阵容会成功 - 你再次获得DateTime
并且这两行不会改变其格式。
看起来你需要的只是 - 只将日期时间的一部分作为函数的参数传递。但是只需使用argDate.Date
(假设agrDate
是DateTime)就可以很容易地实现它而不需要任何强制转换
答案 1 :(得分:1)
DateTime date = new DateTime( argDate.Years, argDate.Month, argDate.Day );
我认为这就是你想要的。
请参阅:C# Reference
修改强>
与Andy Korneyev的解决方案相同 - 好吧,他看起来更好,但都创建了第二个DateTime
对象。
答案 2 :(得分:0)
考虑使用DateTime.ParseExact方法。
// Parse date and time with custom specifier.
string format = "dd.mm.yyyy hh:mm:tt";
DateTime date;
try {
date = DateTime.ParseExact(argDate, format, CultureInfo.InvariantCulture);
}
catch (FormatException e) {
throw new ArgumentException("argDate", e);
}