Dave
Dave

Reputation: 7359

C#: DateTime problems

In a variable of DateTime typeI have this value = {30/07/2014 0:00:00}

I want only the date:

var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

with it I obtain 30/04/2014 correctly

but when I want to convert in MM/dd/yyyy using:

var aux2 = DateTime.ParseExact(aux, "MM/dd/yyyy", null);

I have this error:

the string is represents one DateTime not admited in the GregorianCalendar

Why I have this error in aux2?

Upvotes: 0

Views: 188

Answers (2)

Steve
Steve

Reputation: 216273

The problem is your locale setting. Calling ToString() without parameters on a date value produces a string with the pattern day,month,year arranged differently between locales. (And I suppose that you get a string arranged with Day,Separator, Month, Separator, Year).
Passing that string to DateTime.ParseExact with a specific pattern (MM/dd/yyyy) requires the string to be in the exact pattern required Month, Day, Year for your example.

You could force the invariant culture in your conversion with

 var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

this produces a string with the pattern required by the subsequent ParseExact mask

However it is not clear why you need these conversions. A date is not a string and you simply keep it as a date and use the conversion only when you need to represent it somewhere (display, print etc...)

 Console.WriteLine("Date is:" + pedido.ord_cus_deliv_date.ToString("MM/dd/yyyy"));

Upvotes: 2

Sandeep
Sandeep

Reputation: 1

When you call below : var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

This gives you code "07-30-2014" and not "07/30/2014" and that's generate the error while conversion. So to get "07/30/2014", you have to write

var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

Below is overall code for you:

DateTime value = DateTime.Parse("30/07/2014 0:00:00"); //your date time value

var aux = value.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

DateTime dt = DateTime.ParseExact(aux, "MM/dd/yyyy", CultureInfo.InvariantCulture);

var aux2 = dt.ToString(CultureInfo.InvariantCulture).Split(' ')[0]);

I hope this will help you

Regards,
Sandeep

Upvotes: -1

Related Questions