2012-02-13 3 views
1

Si je sauve la date et l'heure dans ce format:conversion de la date à chaîne pour logfile, puis de chaîne à DateTime pour la base de données

string sLogTime = "MMM ddd d HH:mm yyyy"; 

... qu'est-ce que je puis faire pour convertir cette chaîne dans une valeur reconnaissable pour une colonne SQL Server DateTime? Quelque chose comme:

DateTime dtLogTime = Convert.ToDateTime(sLogTime); 
    . . . 
    cmd.Parameters.Add(new SqlParameter("@logDateTime", dtLogTime)); 
    . . . 

?

Répondre

1

Essayez d'utiliser ParseExact ou TryParseExact:

string pattern = "MMM ddd d HH:mm yyyy"; 
DateTime parsedDate; 
DateTime.TryParseExact(dateValue, pattern, null, DateTimeStyles.None, out parsedDate); 
2

Vous pouvez utiliser une analyse syntaxique exacte:

DateTime dtLogTime = DateTime.ParseExact(sLogTime, "MMM ddd d HH:mm yyyy", CultureInfo.CurrentCulture); 

Assurez-vous que vous utilisez une information cohérente de la culture pour la lecture et l'écriture. Les gens utilisent souvent CultureInfo.InvariantCulture pour les formats internes que l'utilisateur ne voit jamais qui est en anglais mais pas spécifique au pays.

1
DateTime dt; 
string Temp1 = "Your Date"; 
if (DateTime.TryParse(Temp1, out dt)) 
{ 
    cmd.Parameters.Add(new SqlParameter("@logDateTime", dt)); 
} 
else 
    cmd.Parameters.Add(new SqlParameter("@logDateTime", DateTime.Now)); 
2

Comme d'autres l'ont dit, utiliser DateTime.ParseExact ou DateTime.TryParseExact, probablement avec la culture invariant. Toutefois, vous devez également connaître le fuseau horaire dans lequel se trouve le journal. Utilisez DateTimeStyles.AssumeUniversal ou DateTimeStyles.AssumeLocal de manière appropriée, ou éventuellement aucune. Fondamentalement, DateTime est un peu compliqué à ce sujet, et vous pouvez facilement finir par faire la mauvaise chose. Vous devriez probablement vous assurer que le DateTime que vous transmettez à votre base de données est en UTC.

Une alternative pour la partie analyse est d'utiliser Noda Time qui fournit un peu plus de clarté (IMO) sur la façon dont vous parssez etc. Vous pouvez ensuite convertir en un DateTime approprié pour passer à votre base de données.

Questions connexes