2009-12-09 5 views
1

J'ai une chaîne DateTime au format 24 HEURES. "2009-12-31T23: 59: 59"
Je le veux dans ce format .. " 12/31/2009 23:59:59 "c'est:" MM/JJ/AAAA HH: MM: SS "

Quand j'ai essayé de le convertir en ficelle je reçois" 31/12/2009 11:59: 59 PM ".. bien que je puisse écrire un code pour manipulation de chaînes .. il ne semble pas être l'un efficace .. De plus, le cas devient pire quand j'ai la valeur dateTime comme" 2009-1-1T1: 19: 15 ".. ici, comme la longueur de la chaîne varie, je ne peux même pas tracer la valeur de Heures et mois en utilisant substring() et convert.ToInt() ..

J'utilise Visual Studio 2005, il est l'erreur de jeter en disant « Ne peut pas convertir implicitement DateTime String » quand j'écris cette déclaration: ..
Comment personnaliser le format datetime ou convertir DateTime en String avec le format requis

result = Convert.ToString(dateValue); 

Je simplifie ma question: est-il une méthode pour convertir "aaaa-mm-jjThh: mm: ss" à "mm/jj/aaaa hh: mm: ss" .. Et il faut travailler en studio visuel 2005 ..

Répondre

4

Vous devez utiliser ParseExact pour le récupérer à datetime:

string FormatDateTime(string dateString) { 
    DateTime dt = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None); 
    return dt.ToString("MM/dd/yyyy HH:mm:ss"); 
} 

Cela devrait donner vous la sortie désirée que vous recherchez. En utilisant InvariantInfo, il s'assurera que les paramètres système ne remplacent pas les barres obliques par ce que vous avez défini dans le système. Je pense avoir vu dans les commentaires que vous aviez un "." étant utilisé comme séparateur de date.

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.invariantinfo.aspx

+0

pas besoin d'écrire ParseExact, il suffit de donner le format de la date dans le déclaration dateVaule.toString (date_format) .. comme ceci "MM '/' dd '/' aaaa '' HH ':' mm ':' ss '.. c'est assez ......... Unholy est correct .. –

+0

Que voulez-vous dire dateValue? Vous n'avez rien mentionné à ce sujet dans votre message original. Vous avez vraiment besoin d'apprendre à poser des questions. Vous ne vous en rendez probablement pas compte, mais si vous laissez juste l'analyse simple essayer de trouver le format de la date, cela prend beaucoup plus de temps que de simplement le fournir, à l'analyseur intialially. C'est pourquoi il existe deux méthodes différentes. Second Unholy basait tout son appareil hors de sa machine, ce qui semble être une configuration non standard. Mais vous ne devriez pas pirater votre propre formateur, un "/" est un séparateur de date, et vous voulez qu'il soit toujours un "/", utilisez une culture qui le supporte. –

+0

Dans votre exemple datestring –

1
string FormatDateString(string date_string) 
{ 
    DateTime date; 
    if (!DateTime.TryParse(date_string, out date) 
    { 
     return null; 
    } 

    return date.ToString("MM/dd/yyyy HH:mm:ss"); 
} 
+2

Je pense que le format devrait être "MM '/' dd '/' yyyy ' 'HH': 'mm':' ss" –

+0

Unholy, pensez-vous me expliquer l'importance des années Apostrophe votre format? Je ne suis pas familier avec ça. Thx :) – Russell

+2

De msdn: "'- Représente une chaîne entre guillemets (apostrophe). Affiche la valeur littérale de n'importe quelle chaîne entre deux caractères apostrophe (')." Lorsque vous utilisez une apostrophe, vous définissez le délimiteur. –

2

Quelque chose comme:

string s = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss"); 
+1

Lorsque je vous ai essayé le code, j'ai obtenu ce qui suit: DateTime.Now.ToString ("MM/jj/aaaa HH: mm: ss") \t "12.09.2009 10:26:09" –

+1

Non, il avait raison. Votre séparateur par défaut dans votre système a été défini comme un "." au lieu d'un "/". Voir cette propriété: http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx –

+2

Oui, à cause de cela, nous devrions utiliser "MM '/' dd '/' yyyy '' HH ':' mm ':' ss ". –