Ich habe einen Wert in einer Variablen vom Typ System.TimeSpan
wie folgt gespeichert .
System.TimeSpan storedTime = 03:00:00;
Kann ich es String
wie folgt in einer anderen Variablen des Typs speichern ?
String displayValue = "03:00 AM";
Und wenn storedTime
Variable den Wert von hat
storedTime = 16:00:00;
dann sollte es konvertiert werden zu:
String displayValue = "04:00 PM";
datepicker value + TimeofDay
?ShortTimePattern
stattdessenstring displayTime = time.ToString("t" [, culture]);
time.ToShortTimeString()
Sehr einfach mit dem String-Format
auf
.ToSTring("") :
Wenn Sie "hh" - >> Die Stunde verwenden, verwenden Sie eine 12-Stunden-Uhr von 01 bis 12.
Wenn Sie "HH" verwenden - >> Die Stunde mit einer 24-Stunden-Uhr von 00 bis 23.
Wenn Sie "tt" hinzufügen - >> Der Am / Pm-Bezeichner.
Beispiel Konvertierung von 23:12 auf 23:12 Uhr:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("hh:mm tt"); // this show 11:12 Pm var res2 = d.ToString("HH:mm"); // this show 23:12 Console.WriteLine(res); Console.WriteLine(res2); Console.Read();
Warten Sie eine Sekunde, das ist nicht alles, was Sie brauchen, um sich um etwas anderes zu kümmern, ist die Systemkultur, da der gleiche Code, der unter Windows mit einer anderen Sprache ausgeführt wird, insbesondere mit einer anderen Kultursprache, ein anderes Ergebnis mit demselben Code erzeugt
Ein Beispiel für Fenster, die auf arabische Sprachkultur eingestellt sind, wird folgendermaßen angezeigt:
// 23:12 م
م bedeutet Abend (erster Brief von مساء).
In einer anderen Systemkultur hängt es davon ab, was in der Windows-Regional- und Sprachoption festgelegt ist. Es wird // 23:12 du angezeigt.
Sie können in der Windows-Systemsteuerung unter Windows Regional und Sprache zwischen verschiedenen Formaten wechseln -> aktuelles Format (Combobox) und ändern ... anwenden. Führen Sie eine Neuerstellung (Ausführung) Ihrer App durch und beobachten Sie, worüber ich spreche.
Wen kann ich also zwingen, Am- und Pm-Wörter auf Englisch anzuzeigen, wenn die Kultur des aktuellen Systems nicht auf Englisch eingestellt ist?
einfach durch Hinzufügen von zwei Zeilen: ->
Im ersten Schritt fügen Sie
using System.Globalization;
Ihren Code hinzuund Ändern des vorherigen Codes wie folgt:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show 11:12 Pm
InvariantCulture => mit dem englischen Standardformat.
Eine andere Frage: Ich möchte, dass die Uhr in Arabisch oder einer bestimmten Sprache ist, auch wenn ich Fenster verwende, die auf das regionale Format Englisch (oder eine andere Sprache) eingestellt sind.
Soution für Arabisch Beispiel:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE"));
Dies zeigt // 23:12 م
Ereignis, wenn mein System auf ein englisches Regionsformat eingestellt ist. Sie können "ar-AE" ändern, wenn Sie ein anderes Sprachformat verwenden möchten. Es gibt eine Liste jeder Sprache und ihres Formats.
Beispiele: ar ar-SA Arabisch ar-BH ar-BH Arabisch (Bahrain) ar-DZ ar-DZ Arabisch (Algerien) ar-EG ar-EG Arabisch (Ägypten)
quelle
Sie können das
TimeSpan
zu einem hinzufügenDateTime
, zum Beispiel:TimeSpan span = TimeSpan.FromHours(16); DateTime time = DateTime.Today + span; String result = time.ToString("hh:mm tt");
Demo: http://ideone.com/veJ6tT
04:00 PM
Standardzeichenfolgen für Datum und Uhrzeit
quelle
11:57 pm
und das hat funktioniert:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
string displayValue="03:00 AM";
Dies ist ein Zeitpunkt , keine Dauer (TimeSpan).
Es stimmt also etwas nicht mit Ihrem grundlegenden Design oder Ihren Annahmen.
Wenn Sie es verwenden möchten, müssen Sie es zuerst in eine DateTime (Zeitpunkt) konvertieren. Sie können eine DateTime ohne den Datumsteil formatieren, das wäre Ihre gewünschte Zeichenfolge.
TimeSpan t1 = ...; DateTime d1 = DateTime.Today + t1; // any date will do string result = d1.ToString("hh:mm:ss tt");
Nein, es kann einen Wert von 4 Uhr haben, aber die Darstellung ist binär. Ein TimeSpan kann den Unterschied zwischen
16:00
und nicht aufzeichnen4 pm
.quelle
DateTime.TimeOfDay
einTimeSpan
- Microsoft führt Sie zu diesem Design zurück :(DateTime
, wenn es einen gäbe, dann wäre dies ("03:00 Uhr") einfach ein Beispiel dafür. Ich kann jedoch sehen, dass dieses Design (ein VerwandterDateTime
) in den meisten Anwendungsfällen die Probleme überkomplizieren würde (dies geht natürlich zu Lasten der Kompliziertheit bei der Durchführung sehr spezifischer Arbeiten um Daten, Zeiten, absolut oder nicht , Zeitzonen usw.)DateTime
noch weiter zu überladen (es ist schon schlimm genug). Es sollte einen Typ geben, der eine "Tageszeit" darstellt - was natürlich genau das ist, was ich in Noda Time implementiert habe. Immer wenn Sie versuchen, viele verschiedene Konzepte in eine kleine Anzahl von Typen zu packen, treten Probleme wie diese auf.DateTime
,TimeOfDay
undDate
.03:00 AM
ist kein "Zeitpunkt". Es ist ein "Punkt an einem Tag".Hier können Sie vorhandene Antworten huckepack nehmen:
public static string ToShortTimeSafe(this TimeSpan timeSpan) { return new DateTime().Add(timeSpan).ToShortTimeString(); } public static string ToShortTimeSafe(this TimeSpan? timeSpan) { return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe(); }
quelle
Sie müssen ein
DateTime
Objekt von Ihrem abrufenTimeSpan
und können es dann einfach formatieren.Eine mögliche Lösung besteht darin, die Zeitspanne zu einem beliebigen Datum mit einem Zeitwert von Null hinzuzufügen.
var timespan = new TimeSpan(3, 0, 0); var output = new DateTime().Add(timespan).ToString("hh:mm tt");
Der Ausgabewert ist
"03:00 AM"
(für das englische Gebietsschema).quelle
Sie können nicht hinzufügen , AM / PM zu ein
TimeSpan
. Sie müssen denTimaSpan
Wert trotzdem zuordnen,DateTime
wenn Sie die Uhrzeit im 12-Stunden-Format anzeigen möchten.TimeSpan
ist nicht für die Verwendung mit einem 12-Stunden-Format vorgesehen, da es sich hier um ein Zeitintervall handelt .Wie es in der Dokumentation heißt ;
Auch Microsoft Docs beschreibt Folgendes:
In diesem Fall können Sie also wie folgt mit AM / PM anzeigen.
TimeSpan storedTime = new TimeSpan(03,00,00); string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");
Randnotiz :
Beachten Sie auch, dass die TimeOfDay- Eigenschaft von a
DateTime
istTimeSpan
, wo sie stehtquelle
Analysieren Sie die Zeitspanne auf DateTime und verwenden Sie dann Format ("hh: mm: tt"). Zum Beispiel.
TimeSpan ts = new TimeSpan(16, 00, 00); DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture); string str = dtTemp.ToString("hh:mm tt");
str
wird sein:str = "04:00 PM"
quelle
Sie können dies versuchen:
string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);
Sie können hh oder mm oder ss oder tt je nach Bedarf entfernen, wobei hh Stunde in 12-Stunden-Formiat, mm Minuten, ss Sekunden und tt AM / PM ist.
quelle
Parse timespan to DateTime. For Example. //The time will be "8.30 AM" or "10.00 PM" or any time like this format. public TimeSpan GetTimeSpanValue(string displayValue) { DateTime dateTime = DateTime.Now; if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12")) dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture); else dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture); return dateTime.TimeOfDay; }
quelle
Zunächst müssen Sie die Zeitspanne in die DateTime-Struktur konvertieren:
var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)
Dann müssen Sie den Wert in eine Zeichenfolge im Kurzzeitformat konvertieren
var result = dt.ToString("t"); // Convert to string using Short Time format
quelle