web-dev-qa-db-fra.com

Convertir DateTime pour MySQL à l'aide de C #

Je veux changer le DateTime pour MySQL en C #.

Ma base de données MySQL accepte uniquement ce format 1976-04-09 22:10:00.

En C # ont une chaîne qui a une valeur de date:

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

Je veux convertir pour MySQL alors ça ressemble à:

1976-04-12 22:10

Comment puis-je les modifier ou comment les autres programmeurs le font en utilisant dd mm hh yy méthode? Quelqu'un peut-il m'en parler?

24
Steven Spielberg

Gardez à l'esprit que vous pouvez coder en dur le format ISO

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

ou utilisez ensuite:

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

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

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

etc

57
abatishchev

Si le format de votre chaîne pour le DateTime est fixe, vous pouvez le convertir en System.DateTime en utilisant:

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

Maintenant, lorsque vous en avez besoin dans votre format spécifique, vous pouvez ensuite inverser le processus, à savoir:

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

edit - code mis à jour. Pour une raison étrange, DateTime.ParseExact ne jouait pas à Nice.

16
Jason Jong

Je vous suggère fortement d'utiliser des requêtes paramétrées au lieu d'envoyer des valeurs sous forme de chaînes en premier lieu.

De cette façon, vous devez uniquement être en mesure de convertir votre format d'entrée en DateTime ou DateTimeOffset, et vous n'avez alors pas à vous soucier du format de la base de données. Ceci est non seulement plus simple, mais évite les attaques par injection SQL (par exemple pour les valeurs de chaîne) et est plus robuste face aux changements de paramètres de base de données.

Pour la conversion d'origine en DateTime, je vous suggère d'utiliser DateTime.ParseExact ou DateTime.TryParseExact pour spécifier explicitement le format attendu.

6
Jon Skeet

Cela fonctionne pour moi:

1. extraire la date de la base de données Oracle et la transmettre à la variable

 string lDat_otp = "";

  if (rw_mat["dat_otp"].ToString().Length <= 0)
  {
      lDat_otp = "";
  }
  else
  {
      lDat_otp = rw_mat["dat_otp"].ToString();
  }

2.Conversion au format mysql

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

3. passez la variable formatForMySql à la procédure ou à autre chose

1
CrBruno