2009-08-17 5 views
3

Ich möchte eine DateTime in die Konfigurationsdatei einfügen, aber ich möchte die DateTime in einer bestimmten Weise ausgedrückt. Ich habe Beispiele für die Verwendung einer DateTime in einem ConfigurationElement gesehen (wie im folgenden Beispiel). Die Beispiele, die ich gesehen habe, haben alle das Datum im amerikanischen Format. Ich möchte sicherstellen, dass das Datum für alle verständlich ist, unabhängig davon, wer sie sind, also möchte ich yyyy-MM-dd HH:mm:ss als das Format verwenden.DateTime-Eigenschaft in einem ConfigurationElement

Wie mache ich das, wenn ich eine Klasse verwende, die von ConfigurationElement abgeleitet ist?

class MyConfigElement : ConfigurationElement 
    { 
     [ConfigurationProperty("Time", IsRequired=true)] 
     public DateTime Time 
     { 
      get 
      { 
       return (DateTime)this["Time"]; 
      } 
      set 
      { 
       this["Time"] = value; 
      } 
     } 
    } 

Antwort

3

Sind Sie sicher? Afaik, der Standard ist XML-Stil und das ist es auch, was du willst (JJJJ-MM-TT).

+0

Doh! Ja, es funktioniert ohne Änderung. Das ist, was ich bekomme, wenn ich versuche, Dinge zu lesen und es nicht wirklich auszuprobieren, um es selbst zu sehen. Dr. Feynman wird sich in seinem Grab drehen. –

4

Ich denke, man folgendes verwenden:

[ConfigurationProperty("Time", IsRequired=true)] 
public DateTime Time 
{ 
    get 
    { 
     return DateTime.ParseExact(
      this["Time"].ToString(), 
      "yyyy-MM-dd HH:mm:ss", 
      CultureInfo.InvariantCulture); 
    } 
    set 
    { 
     this["Time"] = value.ToString("yyyy-MM-dd HH:mm:ss"); 
    } 
} 
+1

Für mich wirft es Format Ausnahme auf dieser ["Time"] – Uriil

0

ich obige Lösung ähnliches Problem mit haben. Für mich ist der String von "this [" Time "]. ToString()" ist wie "2015/6/12 15:31:24", während Format Parameter der Methode DateTime.ParseExact ist "JJJJ-MM-TT HH : mm: ss ". Daher kann diese Methode die Zeichenfolge nicht mit dem angegebenen Format analysieren. Alternativ können Sie wie folgt tun:

if(this["Time"] is string) 
{ 
    return DateTime.ParseExact(
     this["Time"].ToString(), 
     "yyyy-MM-dd HH:mm:ss", 
     CultureInfo.InvariantCulture); 
} 
else 
{ 
    DateTime time = (DateTime)this["Time"]; 
    return DateTime.ParseExact(
     time.ToString("yyyy-MM-dd HH:mm:ss"), 
     "yyyy-MM-dd HH:mm:ss", 
     CultureInfo.InvariantCulture); 
}