2016-03-29 15 views
0

Ich versuche, eine Datumsspalte im Raster wie folgt anzuzeigen: "TT-MM-JJJJ". In der dbf-Tabelle wird das Datum in diesem Format gespeichert: "YYYY-MM-DDThh: mm: ss" in einem Zeichenfeld. Das Raster von diesem Cursor erstellt wird:Datumsformatierung in einem Raster

select id,beginningDate,endDate,cnp from doc ORDER BY id desc INTO CURSOR myCursor 

ich so etwas wie dies wünschen:

select id,convert(beginningDate, Datetime,"dd-mm-yyyy"),endDate,cnp from doc ORDER BY id desc INTO CURSOR myCursor 
+0

Ich weiß, dass Sie möglicherweise nicht in der Lage, dies zu ändern, aber es gibt keinen Grund, eine Datetime in einem Zeichenfeld zu speichern. Wenn Sie ein Datetime-Feld hätten, wäre das einfach. –

Antwort

0

Fox hat keine eingebaute Funktion convert() genannt, noch kann es Ihre Nicht-Standard-Datum Griff/Zeit String Format direkt.

Eine schnelle und schmutzige Art und Weise einen String foo im gegebenen Format ("YYYY-MM-DDThh: mm: ss") zu konvertieren zu einem Datum/Zeit-Wert

ctot("^" + chrtran(foo, "T", " ")) 

Das Caret markiert den Eingang als lokales unabhängiges Standardformat, das sich von dem Eingabeformat nur dadurch unterscheidet, dass ein Leerzeichen anstelle eines "T" vorhanden ist.

Sie können das Datum Teil aus diesem Extrakt über die ttod() Funktion oder einfach nur den Datumsteil aus der Zeichenfolge extrahieren und konvertieren:

ctod("^" + left(foo, 10)) 

Fox Kontrollen - einschließlich der in einem Raster - in der Regel verwenden die konfiguriertes Windows-Systemformat (unter der Annahme, dass set("SYSFORMATS") == "ON"); Sie können dies überschreiben, indem Sie mit dem Befehl SET DATE spielen.

Es scheint keine maskenbasierte Datumsformatierung wie in den meisten anderen Sprachen zu geben. dtoc() und ttoc() nehmen keine Formatzeichenfolgen, transform() nimmt eine Formatzeichenfolge aber ignoriert es für Datumswerte.

0

Ich bin mit Tamar zu diesem Thema, Sie sollten stattdessen ein Datetime-Feld verwendet haben.

Da Sie es auf diese Weise speichern, können Sie es mit älteren Versionen als VFP9 in die "datetime" -Konfiguration konvertieren (oder ttod (ctot()) - in beiden Fällen müssen Sie das nicht tun T-Zeichen) entfernen:

select id, ; 
    Cast(Cast("^"+beginningDate as datetime) as date) as beginningDate, ; 
    endDate,cnp ; 
    from doc ; 
    ORDER BY id desc ; 
    INTO CURSOR myCursor ; 
    nofilter 

In Gittern oder jedes anderen Textbox-Steuerelement, können Sie den Anzeigestil steuern Dateformat Eigenschaft. ie:

* assuming it is Columns(2). 11 is DMY 
thisform.myGrid.Columns(2).SetAll('DateFormat', 11) 
+0

Hinweis: Das Zeichen 'T' zu lassen, anstatt ein Leerzeichen zu ersetzen, funktioniert nur mit VFP7 und neuer. – DarthGizka

+0

@DarthGizka, auch Cast funktioniert nicht vor VFP9 aber auch das ist 9 Jahre alt.Ich habe nicht in Frage eine Version erwähnt wurde. –

+0

Richtig genug. Wenn Sie jedoch mit einem Legacy-System arbeiten, können Sie Ihre Lieblings-Fox-Version nicht auswählen ... Und heutzutage fällt so ziemlich alles, was mit Fox zu tun hat, unter die Legacy. Vor ein paar Monaten stieß ich auf FPW 2.6 (ich scheiße dich nicht) und ich kenne aktive kommerzielle Operationen basierend auf Clipper und anderen basierend auf FPD. Die Zeit läuft für Altsysteme anders. – DarthGizka