2009-06-29 7 views
1

Nehmen wir an, Sie haben Zeichenfolgen dieses Formats.Parse Monat und Datum von Zeichenfolge DateTime

11. Januar, „111“ 1. November „1101“ 13. Oktober, „1013“ usw.

Also im Grunde alles, was Sie es und speichern Sie in zwei Variablen Datum und Monat analysieren mögen.

Ich brauche keinen Code zum Parsen, ich kann das leicht tun. Ich frage mich nur, ob jemand den Weg kennt, um etwas wie DateTime.TryParse() oder etwas ähnliches zu tun.

Prost

Antwort

4

Datetime verwenden, es könnte die Zeichenfolge Parsen von Hand so etwas wie diese

string value = "111"; 
if (value.Length < 4) value = "0" + value; 
DateTime dt; 
if (DateTime.TryParseExact(value, "MMdd", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) { 
    int month = dt.Month; 
    int day = dt.Day; 
} 

Aber ganz ehrlich, du bist besser dran, nur sein. Wenn Sie den Tag- und den Monatsteil in zwei separaten Variablen haben möchten, führen Sie einfach einen Overhead (so klein wie möglich) mit DateTime ein, den Sie nicht benötigen.

int value = 111; 
int month = value/100; 
int day = value % 100; 

if (month > 12) 
    throw new Exception("Invalid Month " + month.ToString()); 

if (day > DateTime.DaysInMonth(year, month)) 
    throw new Exception("Invalid Day " + day.ToString()); 
+0

Wie ich verstehe, Autor bedeutet Formatzeichenfolge für vollständige Zeile, d.h. für '11. Januar, "111"'. – arbiter

+1

Ich stimme dir zu. Deshalb analysiert die tatsächliche Implementierung es manuell. Ich habe mich gerade gefragt, ob es DateTime-Eigenschaft – grobartn

+0

Gut zu hören gab. Wenn Sie die von mir zur Verfügung gestellte manuelle Analysemethode verwenden, möchten Sie möglicherweise eine zusätzliche Validierung hinzufügen, z. B. auf Nulldatum prüfen, prüfen, ob Wert> 100 ist (101 ist das Mindestdatum für dieses Format). – Bob

1

sollte es möglich sein, dass ParseExact oder TryParseExact mit zu tun.

Ich glaube nicht, dass Ihr Beispiel funktioniert, es weigert sich, 111 als 11. Januar zu analysieren, es als 1. Oktober zu sehen. Wenn Sie mit zwei Ziffern für beide Teile des Datums bleiben, sollte das sauberer sein.

DateTime parsedDate; 
if (DateTime.TryParseExact("0111", "MMdd", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out parsedDate)) 
{ 
    // do something with parsedDate.Month and parsedDate.Day 
}