在不使用 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
对象。
我在尝试使用 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
对象。