在不使用 C# 的 SAP RFC 的情况下转换日期时间格式

Converting datetime format without using SAP RFC with C#

我在尝试使用 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 is not valid'

考虑使用 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);
  }

C# 中的 DateTime 有其自己的表示形式,没有任何您可以查看或更改的 "format"。

所以短语 "datetime in dd.mm.yyyy format" 完全没有意义。

让我们看看你的代码:

string tmpDate = argDate.ToString("dd.MM.yyyy");
DateTime date = Convert.ToDateTime(tmpDate);

此处您正在将 DateTime 转换为 string,然后再转换回 DateTime

你在回投时遇到异常只是因为 Convert 使用了你的 windows 指定的文化,如果它与字符串中的文化不同 - 你需要 DateTime.ParseExact和明确的格式规范。

但即使此转换成功 - 您将再次获得 DateTime 并且这两行不会更改其格式。

看起来您所需要的只是传递日期时间的一部分作为函数的参数。但是,只需使用 argDate.Date(假设 agrDate 是 DateTime)

,无需任何强制转换即可轻松实现
DateTime date = new DateTime( argDate.Years, argDate.Month, argDate.Day );

我想这就是你想要的。

参见:C# Reference

编辑:

这与 Andy Korneyev 的解决方案相同 - 好吧,他的也更好看,但两者都创建了第二个 DateTime 对象。