ShaneKm
ShaneKm

Reputation: 21368

Convert DateTime

This works:

testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null);

This does NOT:

string somedate = "16/10/2010";
testDateTime = DateTime.ParseExact(somedate, "dd/MM/yyyy", null);

why??

Upvotes: 0

Views: 235

Answers (6)

ShaneKm
ShaneKm

Reputation: 21368

for some reason it would not work for me UNTIL i added this: CultureInfo.InvariantCulture

DateTime.ParseExact(sValue, "dd/MM/yyyy", CultureInfo.InvariantCulture);

Upvotes: 0

Sachin Shanbhag
Sachin Shanbhag

Reputation: 55519

Both the things worked for me when I tried. What is the error you are getting?

The ParseExact() uses the second parameter to parse your input string and not to return the value in that format.

EDIT: from Joe's comment below - The output you get will be in "MM/dd/yyyy" format" - the output will be a DateTime type that doesn't have any intrinsic format.

Upvotes: 0

to StackOverflow
to StackOverflow

Reputation: 124794

Both of your examples are equivalent, and should work if your current culture is en-US, but not necessarily in all other cultures.

For example, the following will throw a FormatException because the de-DE culture uses period as a separator (16.10.2010):

System.Threading.Thread.CurrentThread.CurrentCulture =
             CultureInfo.CreateSpecificCulture("de-DE");
DateTime testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null);

In general it's good practice (FxCop will warn about it) to always specify the IFormatProvider parameter when it's available: usually either CultureInfo.CurrentCulture if you're parsing input from the current user; or CultureInfo.InvariantCulture if you're parsing input from an external source.

// For input from the current user (16.10.2010 in Germany)
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.CurrentCulture);

// For input from an external source in a defined culture-invariant format
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Upvotes: 1

Andrei Bularca
Andrei Bularca

Reputation: 1024

You are trying to change the DateTime format right? You can not do that with a DateTime object. You can change the format only when you display the DateTime object using String.Format: String.Format("{0:d/M/yyyy HH:mm:ss}", dt). (for example or other methods)

Upvotes: 0

Jonathan
Jonathan

Reputation: 12015

It worked fine when I tried it... Just copied and pasted it.

Insert a breakpoint, put your pointer over the variable and check the month, day and year member. If they are not rights, show us what you see.

If you are using a print or msgbox to show the value of the variable, maybe you are not suplying a mask/format for the output.

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1039438

Both code snippets are absolutely equivalent and should work/not work the same. I suspect that the value of the somedate variable is not what you think it is inside your application. Try debugging.

Upvotes: 2

Related Questions