Sql server 2008 forcing date from dd/MM/yyyy to MM

2020-05-07 08:56发布

问题:

I have a weird problem with sql server 2008. I am trying to save date with dd/MM/yyyy format into sql server 2008, But after inserting date it automatically get converted into MM/dd/yyyy.

Note : my computer clock format is dd/MM/yyyy

My report viewer date text box properties

enter image description here

Date from my database table enter image description here

my c# code

lbldate.Text = DateTime.Today.ToShortDateString();

date on report 05/04/2017

回答1:

SQL Server is the Data Layer and as such there is no formatting available; it stores a date as a 4 byte number which is relative to days with 0 = 01/01/1900.

The Application Layer DateTime type is generally an ODBC Canonical representation which basically looks like a class with integer properties for each component (year, month, date, hours, minutes, seconds, milliseconds).

The Presentation Layer is what you actually see, and that is where you should be concerned. When your application calls the ToShortDateString() method, it is calling the display format from the threads current culture, which may or may not reflect the systems settings for Region & Language or Date & Time.

Solution number one is to set the threads current culture, but this would just go to that particular cultures standard display

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

Solution number 2 is to just use a custom DateTime format string

lbldate.Text = DateTime.Today.ToString("dd/MM/yyyy");


回答2:

I would not say this is a "problem" so to speak. This is how SQL handles dates. Your computer clock format is not relevant. To change the format, use CONVERT in your queries. Ex:

SELECT CONVERT(varchar, GETDATE(), 103)

Results: 04/05/2017

SELECT CONVERT(varchar, GETDATE(), 101)

Results: 05/04/2017

The codepage arguments are listed here: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

edit per your new update: Your C# should look something like this:

DateTime.Now.ToString("dd/mm/yyyy")


回答3:

What you're seeing is how the query tool presents results and has nothing to do with how Sql Server stored the data. Sql Server actually stores dates in a binary (not readable) format.

This is a good thing. Let Sql Server store dates (and other data) how it wants. You only need to worry about how you show the data to users after you retrieve it, and most of the time the best place to worry about that formatting isn't even in the server at all, but in your client language.