+4  A: 

Are the requests coming from different browsers? Are you picking up the Culture/UICulture from the Accept-Language header in the HTTP Request? If so, it is possible that you have one browser that has it's preferred language set to en-US and another set to en-GB?

Martin Peck
It's en-us,en;q=0.5 through the request.
craigmoliver
+3  A: 

The suggestions to check the current culture are promising.

One additional possibility to consider: Is your application running in a load-balanced server farm and are the web servers properly configured identically?

Chris W. Rea
They are not load balanced and this happens on my local machine and the dev server.
craigmoliver
A: 

In the methods where I performed a "Convert.ToDate" I put the following code in:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

Still don't know WHY it's doing it. The default culture on my machine and the development server is en-US.

This is maddening!

craigmoliver
A: 

Does the same happen when you step through it with a debugger?

Inferis
+1  A: 

Create a breakpoint that triggers whenever Thread.CurrentThread.CurrentCulture changes. That should at least point you in the right direction.

Richard Szalay
A: 

If you are using DataSets generated from XSD schemas (DataSet.ReadXmlSchema method), and the XSD contains an msdata:Locale Attribute, culture-dependent operations on this DataSet might use the locale from the schema, ignoring web.config settings. Explicitly setting it for the current thread then overrides the locale from the XSD again.

I lost a few hours on strange locale-switching-related problems once and this turned out to be the reason.

Maybe something similar could also hide in the Enterprise Library config files. I would also recommend searching all project-related files for the offending locale string (en-UK). Maybe something interesting comes up.

acezanne
A: 

Is this happening during the life cycle of a single page, or across several pages? If it's across several pages, you should also check the @Page directives in the markup for each page in your app - you can explicitly set the culture and UI culture there. Maybe you have one rogue page with the culture set improperly.

E.Z. Hart
On page and don't modify the culture
craigmoliver
A: 

You could also check in your procedures for use of the SET DATEFORMAT statement. In SQL Server it is possible to change the intepretation of date values within the context of a procedure so that the database parses dates differently. The following code

SET DATEFORMAT 'DMY';
SELECT CAST('1-4-2009' AS date);
SET DATEFORMAT 'MDY';
SELECT CAST('1-4-2009' AS date);

Returns the following results on my PC

2009-04-01
2009-01-04

SQL Server will therefore interpret the string values as dates differently

Conrad