2016-04-04 8 views
1

Hier ist meine Eingabe:Warum ändert sich meine Ausgabe von Militärzeit zu Standard?

und ich bekomme diese Ausgabe:

4/4/2016 2:46:57 PM14751

Dann, wenn ich die beiden Eingänge wie dieses Flip:

sw.WriteLine(Convert.ToString(newurls[counter]) + "{0:MM/dd/yyyy HH:mm:ss tt} ", DateTime.Now); 

ich diese Ausgabe:

1459104/04/2016 14:48:02 PM

Hinweis: newurls[counter] ändert sich die ganze Zeit.

Zurück auf Punkt möchte ich es so, dass die DateTime jetzt in der Militärzeit ist, aber vor newurls[counter. Was ich meine ist, möchte ich die Ausgabe wie folgt sein:

04/04/2016 14:48:02 PM14591

Warum hin und her von Militär- und Standard die Zeiten wechseln?

+0

Haben Sie "sw.Write (" {0: MM/TT/JJJJ HH: mm: ss tt} ", DateTime.Now); sw.WriteLine (Convert.ToString (newurls [counter]));' EDIT: Igors Antwort ist besser. Verwende das :) – ManoDestra

Antwort

4

sollte wohl

sw.WriteLine("{0:MM/dd/yyyy HH:mm:ss tt} {1}", DateTime.Now, Convert.ToString(newurls[counter])); 

Im ersten Fall werden Sie die Datetime in eine Zeichenfolge konvertieren und dann auf die Convert.ToString Ergebnisse hinzufügen. In der zweiten Instanz konvertierst du es zuerst mit deinem Formatierer und dann zeichnest du die Strings.

In meiner Änderung oben Ich bin ein Platzhalter für Ihren zweiten Parameter in der Zeichenfolge als {1} hinzufügen, das ist, wo die Convert.ToString(newurls[counter]) platziert werden. Für weitere Informationen siehe Composite Formatting.

1

Wenn Sie hinzufügen:

DateTime.Now + Convert.ToString (newurls [counter])

, das ist, wo Sie Ihr Datum Formatierung verlieren

Ich denke, was Sie wollen ist:

sw.WriteLine ("{0: mM/tt/HH: mm: ss tt} {1}" DateTime.Now, Convert.ToString (newurls [counter]));

1

Das Problem, mit dem Sie es zu tun haben, ist, dass Sie es mit zwei völlig verschiedenen Formaten und Werten zu tun haben.

Im ersten Beispiel, Sie geben das String-Format:

"{0:MM/dd/yyyy HH:mm:ss tt} " 

und dann wird den Wert Bereitstellung

DateTime.Now + Convert.ToString(newurls[counter]) 

Den Standard ToString() Implementierung für ein Datum ist die kurze generische Version. Da der Parameter 0 keine DateTime ist, wird der Wert als Zeichenfolge behandelt. Sie können dies überprüfen, indem Sie einfach schreiben:

sw.WriteLine(DateTime.Now + Convert.ToString(newurls[counter])); 

Die Lösung besteht darin, die verschiedenen Komponenten als separate Elemente zu behandeln:

sw.WriteLine("{0:MM/dd/yyyy HH:mm:ss tt} {1}", 
    DateTime.Now, 
    Convert.ToString(newurls[counter])); 

Sie jetzt die Beziehung ändern zueinander und bekommen von {1} und {0} können, was du erwartest. Wenn Sie Zeichenkettenformate verwenden, sollten Sie nie benötigen, um das + Zeichen zu verwenden. Schreiben Sie einfach Ihre Werte als kommagetrennte Liste und verwenden Sie die Zahl in den geschweiften Klammern, um auf die einzelnen Parameter zu verweisen, die Sie übergeben. In diesem Fall wurde DateTime.Now als erstes übergeben, daher bezeichnen wir es als {0}. Convert.ToString(newurls[counter]) wurde in Sekunden übergeben, so dass wir es als {1} bezeichnen.

Verwandte Themen