Reputation: 21368
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
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
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
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
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
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
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