2016-10-13 1 views
0

ich eine Zeichenfolge haben 10/13/2016 21:42Conversion String für Datum und Uhrzeit (24-Stunden-Format) ist passen nicht

Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm") 
'result is 10/13/2016 21:42 

Ich möchte das Ergebnis 10/13/2016 21:42 (24-Stunden-Format), wie die obige Zeichenfolge sein. Aber warum, nachdem ich es wie unten konvertiert habe, wird es 12-Stunden-Format?

Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing) 
'result is 10/13/2016 09:42 

Wie löst man es, wird es 09:42 nicht 21:42? Ich brauche DateTime Typ Daten keine Zeichenfolge.

+2

Warum haben Sie diese als C# markiert, wenn es in VB ist? Beachten Sie, dass in der zweiten Zeile das Ergebnis eine 'DateTime' ist, keine' String' ... eine 'DateTime' hat * kein inhärentes Format. –

+0

Es tut mir so leid, nur ich kann C# Antwort lesen. Ich kann das Tag entfernen. – Bcktr

+3

Grundsätzlich lautet die Antwort: "Sie scheinen zu verwechseln, was passiert, wenn Sie' ToString() 'auf einer' DateTime' mit Daten aufrufen, die sich in der 'DateTime' selbst befinden." –

Antwort

1

Diese Linie nimmt die Zeichenfolge, 10/13/2016 21:42 und analysiert es das Format zur Verfügung gestellt werden. Dies ist nützlich, wenn eine Datumszeichenfolge in einem zweideutigen Format wie 06/05/2016 ist und obwohl diese entweder 5. Juni th oder 6. Mai th darstellen könnte, aber Sie wissen, dass es Tag ist/Monat, 6. Mai th in meinem Beispiel. Für mehr siehe DateTime.ParseExact.

Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing) 

Das Ergebnis dieses Verfahrens ist eine Datumzeit, kein String.

'result is 10/13/2016 09:42 

So das Ergebnis gültig - je nachdem, wie Sie es inspizieren - aber es gibt keine AM/PM Indikator. Es ist bereits eine DateTime. Weitere Operationen an ETAtime können dies belegen.

Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm") 
Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing) 
Console.WriteLine("{0:MM/dd/yyyy HH:mm}", ETAtime) 
Console.WriteLine("{0:MM/dd/yyyy hh:mm}", ETAtime) 
Console.WriteLine("{0:MM/dd/yyyy hh:mm tt}", ETAtime) 

Ausgabe

10/13/2016 21:42
10/13/2016 09:42
10/13/2016 09:42 PM

Es ist wirklich kein Problem mit Ihrem Code.

Meine IDE (Visual Studio 2012) zeigt das Datum in diesem Format beim Debuggen 10/13/2016 09:42 PM an. Ich bin in den USA ansässig. Was angezeigt wird, sollte auf Ihren regionalen Einstellungen basieren. Es wäre interessant, einen Screenshot von dir zu sehen.

enter image description here

+0

Ich habe versucht, Dim W Wie DateTime = ETAtime.ToString ("MM/TT/JJJJ HH: mm") es noch eine Ausgabe "13.10.2016 19:42" Ich sehe es in den Haltepunkt und in der Datenbank mit gespeichert dieser Wert, es ist verrückt, sollte es "13.10.2016 21:42" sein. Irgendeine Nachsaugung? Vielen Dank im Voraus. – Bcktr

+0

Speichern Sie in einem String-Feld in der Datenbank oder einem DateTime-Feld? – djv

+0

Absolut ja, der Typ Daten ist Datetime – Bcktr

0

versuchen Sie dies:

 dddd, MMMM d, yyyy HH:mm:ss tt" 
2

Ein Datetime-Objekt nicht über ein „Format“, daran zu denken als nur halten, was das Datum und die Zeit tatsächlich ist. Durch das Speichern dieser Informationen in einem DateTime-Objekt können Sie mathematische/logische Operationen ausführen. Wie Sie dem Benutzer die DateTime-Stunden anzeigen, bleibt Ihnen überlassen. Die ToString-Methode kann eine dieser beiden Stunden-Format angezeigt werden, je nachdem, welches Format-String Sie es passieren ... zum Beispiel:

Dim ETAtime1 As String = Convert.ToDateTime("10/13/2016 21:42").ToString("MM/dd/yyyy HH:mm") 
    Dim ETAtime As DateTime = DateTime.ParseExact(ETAtime1, "MM/dd/yyyy HH:mm", Nothing) 

    MsgBox(ETAtime.ToString("HH:mm")) 
    'Outputs 21:42 
    MsgBox(ETAtime.ToString("h:mm")) 
    'Outputs 9:42 
+0

Hallo, danke. Ich habe versucht, Sie zu programmieren. Seine Arbeit in der Nachrichtenbox. Aber wenn im Haltepunkt anders ist, ist auch die Datenbank gleich. Ich verwechselte – Bcktr

+0

Wenn Sie während der Fehlersuche auf die ETAtime-Variable "spähen", wird es nur zeigen Sie eine Standard-ToString-Visualisierung von Datum und Uhrzeit, die in der Variablen gespeichert sind, haben Sie keine Kontrolle über das Ändern. Genau so wurde Visual Studio programmiert, um Ihnen den Wert dieser Variablen zu zeigen. Das obige Beispiel beweist, dass, selbst wenn Ihr Haltepunkt Ihnen ein anderes Format anzeigt, wenn Sie die Datetime mit .tostring messagingbox haben, Sie es beliebig formatieren können. – soohoonigan