Rajesh Parab
Rajesh Parab

Reputation: 3

Converting datetime format without using SAP RFC with C#

I got a problem when trying to convert a date-time format with SAP RFC.

I'm trying this:

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);

But getting an error 'Specified Cast is not valid'

Upvotes: 0

Views: 3012

Answers (3)

Mario The Spoon
Mario The Spoon

Reputation: 4869

DateTime date = new DateTime( argDate.Years, argDate.Month, argDate.Day );

I think this is what you want.

See: C# Reference

Edit:

Which is the same as Andy Korneyev solution - Ok, his is nicer too look at, but both create a second DateTime object.

Upvotes: 1

Andrey Korneyev
Andrey Korneyev

Reputation: 26876

DateTime in C# has its own representation and doesn't has any "format" which you can see or change.

So phrase "datetime in dd.mm.yyyy format" has no sense at all.

Let's look at your code:

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

Here you're converting DateTime to string and then back to DateTime.

You're getting exception on back cast just because Convert uses your windows specified culture, and in the case it differs from the one in the string - you need DateTime.ParseExact and explicit format specification.

But even if this cast will be successful - you again will get DateTime and this two lines will not change its format.

It looks like all you need - is just pass date only part of datetime as argument of your function. But it can be achieved pretty easily without any casts just by using argDate.Date (assuming agrDate is DateTime)

Upvotes: 2

Mehrzad Chehraz
Mehrzad Chehraz

Reputation: 5147

Consider using the DateTime.ParseExact method.

  // 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);
  }

Upvotes: 0

Related Questions