tags:

views:

86

answers:

3

i want to change the DateTime for MySQL in C#

my MySQL database only accept this format 1976-04-09 22:10:00.

in C# i have a string who have a date value

string str = "12-Apr-1976 22:10";

i want to convert for MySQL then it look like

1976-04-12 22:10

How i can change them or how other programmer do this by using dd mm hh yy method? Are anyone tell me about them.

A: 

If your string format for the DateTime is fixed you can convert to the System.DateTime using:

string myDate = "12-Apr-1976 22:10";
DateTime dateValue = DateTime.Parse(myDate);

Now, when you need it in your specific format, you can then reverse the process, i.e.:

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm");

edit - updated code. For some strange reason DateTime.ParseExact wasnt playing nice.

Jason Jong
btw, your code doesn't work out of the box, I don't know why. However just `DateTime.Parse` works properly
abatishchev
+2  A: 

Keep in mind that you can hard-code ISO format

string formatForMySql = dateValue.ToString("yyyy-MM-dd hh:mm");

or use next:

// just to shorten the code
var isoDateTimeFormat = CultureInfo.InvariantCulture.DataTimeFormat;

// "1976-04-12T22:10:00"
dateValue.ToString(isoDateTimeFormat.SortableDateTimePattern); 

// "1976-04-12 22:10:00Z"    
dateValue.ToString(isoDateTimeFormat.UniversalSortableDateTimePattern)

and so on

abatishchev
hh:mm is 12hr format, you'll need HH:mm. I just updated my code with that section
Jason Jong
+1  A: 

I would strongly suggest you use parameterized queries instead of sending values as strings in the first place.

That way you only need to be able to convert your input format to DateTime or DateTimeOffset, and then you don't need to worry about the database format. This is not only simpler, but avoids SQL injection attacks (e.g. for string values) and is more robust in the face of database settings changes.

For the original conversion to a DateTime, I suggest you use DateTime.ParseExact or DateTime.TryParseExact to explicitly specify the expected format.

Jon Skeet
With my experience with MySQL, probably because of collation settings, it not always accepts `System.DateTime` and the best way to guarantee proper work on any server is explicitly convert date to string in format `yyyy-MM-dd ..`
abatishchev