Conversia șir de caractere în Ora (Programare, C#, Asp.Net)

Apollo a intrebat.
a intrebat.

Am o oră care este 16:23:01. Am încercat să folosesc DateTime.ParseExact, dar nu funcționează.

Iată codul meu:

string Time = "16:23:01"; 
DateTime date = DateTime.ParseExact(Time, "hh:mm:ss tt", System.Globalization.CultureInfo.CurrentCulture);

lblClock.Text = date.ToString();

Vreau să apară în etichetă ca fiind 04:23:01 PM.

4 răspunsuri
Jon Skeet

„16:23:01” nu se potrivește cu tiparul „hh:mm:ss tt” – nu are un indicator am/pm, iar 16 clar nu se află într-un ceas de 12 ore. Specificați acest format în parsing partea de parsare, deci trebuie să se potrivească cu formatul datelor existente. Doriți:

DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss",
                                        CultureInfo.InvariantCulture);

(Observați cultura invariantă, nu cultura curentă – presupunând că datele de intrare utilizează întotdeauna două puncte).

Dacă doriți să să formatați în hh:mm:ss ttatunci trebuie să puneți acea parte în ToString apel:

lblClock.Text = date.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);

Sau mai bine (IMO) folosiți „oricare ar fi modelul de timp lung pentru cultură”:

lblClock.Text = date.ToString("T", CultureInfo.CurrentCulture);

De asemenea, rețineți că hh este neobișnuit; de obicei, se folosește nu nu se dorește să se introducă 0 în stânga pentru numere mai mici de 10.

(De asemenea, luați în considerare utilizarea Noda Time API, care are o funcție LocalTime tip – o potrivire mai potrivită pentru o simplă „oră a zilei”).

bhs
string Time = "16:23:01";
DateTime date = DateTime.Parse(Time, System.Globalization.CultureInfo.CurrentCulture);

string t = date.ToString("HH:mm:ss tt");

user2704193

Acest lucru vă oferă rezultatele necesare:

string time = "16:23:01";
var result = Convert.ToDateTime(time);
string test = result.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);
//This gives you "04:23:01 PM"  string

De asemenea, ați putea utiliza CultureInfo.CreateSpecificCulture("en-US") deoarece nu toate culturile vor afișa AM/PM.

Aleks

Soluția acceptată nu acoperă cazurile limită. am găsit modalitatea de a face acest lucru cu un script de 4KB. Manipulați intrarea și convertiți o dată.

Exemple:

00:00:00 -> 00:00:00
12:01 -> 12:01:00
12 -> 12:00:00
25 -> 00:00:00
12:60:60 -> 12:00:00
1dg46 -> 14:06

Ați prins ideea… Verificați-o. https://github.com/alekspetrov/time-input-js

Tags:,