转换日期时间格式而不使用带有C#的SAP RFC

时间:2015-04-29 06:33:51

标签: c# datetime sap

尝试使用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无效'

3 个答案:

答案 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);
  }