Swups, das ist auf die Schnelle daraus geworden:
Code: Alles auswählen
// SQL Datum
// "01.01.1900 00:00:00.000"
proc main
LOCAL sqlDate
SET DATE TO GERMAN
sqlDate:=cSqlDate()
sqlDate:new()
? "sqlDate:getDateAsString() "
? sqlDate:getDateAsString()
? "sqlDate:getDateAsDate() "
? sqlDate:getDateAsDate()
? "sqlDate:getSqlDateTime() "
? sqlDate:getSqlDateTime()
?
? 'sqlDate:setDateTime("07.10.2014 14:30:00.100") '
? sqlDate:setDateTime("07.10.2014 14:30:00.100")
?
? "sqlDate:getDateAsString() "
? sqlDate:getDateAsString()
? "sqlDate:getDateAsDate() "
? sqlDate:getDateAsDate()
? "sqlDate:getSqlDateTime() "
? sqlDate:getSqlDateTime()
?
? "Taste"
inkey(0)
? 'sqlDate:setDate("15.10.2014 15:55:55.555") Zeit wird ignoriert'
? sqlDate:setDate("15.10.2014 15:55:55.555")
? sqlDate:getDateAsString()
? "+ 1 Tag"
? sqlDate:getDateAsDate()+1
sqlDate:setDate("16.10.2014")
? "sqlDate:getDateAsString() "
? sqlDate:getDateAsString()
? "sqlDate:getDateAsDate() "
? "+ 1 Tag"
? sqlDate:getDateAsDate()+1
? "sqlDate:getSqlDateTime() "
? sqlDate:getSqlDateTime()
? "Rechnen + 25 Tage"
? sqlDate:getDateAsDate() +25 // Tage
? 'sqlDate:setTime("12:00:00") '
? sqlDate:setTime("12:00:00")
? "sqlDate:getSqlDateTime() "
? sqlDate:getSqlDateTime()
? 'sqlDate:setTime("12:00:00.123") '
? sqlDate:setTime("12:00:00.123")
? "sqlDate:getSqlDateTime() "
? sqlDate:getSqlDateTime()
? "Taste"
inkey(0)
return
// Verschiedenen Methoden umd mit dem SQL DateTime zu arbeiten
// Noch keine Zeitberechnung
CLASS cSqlDate
class VAR cDate
class VAR cTime
class VAR cTimeH
class VAR SqlDate
exported:
class method initClass
class method setDate
class method setDateTime
class method setTime
class method getSqlDateTime
class method getDateAsString
class method getDateAsDate
endclass
// Initilaisiert mit dem Datum 01.01.1900 00:00:00.000
class method cSqlDate:initClass()
::cDate := "01.01.1900"
::cTime := "00:00:00"
::cTimeH:= "000"
::SqlDate:=::cDate+" "+::cTime+"."+::cTimeH
RETURN self
// Liefert das komplette Datum im SQL Format 01.01.1900 00:00:00.000
CLASS METHOD cSqlDate:getSqlDateTime
RETURN ::cDate+" "+::cTime+"."+::cTimeH
// Liefert das Datum als String 01.01.1900
CLASS METHOD cSqlDate:getDateAsString()
RETURN SubStr(::cDate,1,10)
// Liefert das Datum als Datum (rechnen möglich) 01.01.1900
CLASS METHOD cSqlDate:getDateAsDate()
RETURN CtoD(::getDateAsString())
// Setzt das Datum, Zeit bleibt erhalten und/oder wird ignoriert
// LIEFERT: sqlDate 01.01.1900 00:00:00.000
CLASS METHOD cSqlDate:setDate(sqlDate)
// "01.01.1900 00:00:00.000"
::cDate := SubStr(sqlDate,1,10)
::SqlDate:=::cDate+" "+::cTime+"."+::cTimeH
RETURN ::SqlDate
// Setzt Datum und Zeit
// Erwartet 01.01.1900 00:00:00.000
// LIEFERT: sqlDate 01.01.1900 00:00:00.000
CLASS METHOD cSqlDate:setDateTime(sqlDate)
::cDate := SubStr(sqlDate,1,10)
::cTime := SubStr(sqlDate,12,8)
::cTimeH:= SubStr(sqlDate,21,3)
::SqlDate:=::cDate+" "+::cTime+"."+::cTimeH
RETURN ::SqlDate
// Setzt die Zeit, Datum beibt erhalten
// IN: cZeit "00:00:00" oder "00:00:00.000"
// LIEFERT: sqlDate 01.01.1900 00:00:00.000
CLASS METHOD cSqlDate:setTime(sqlTime)
::cTime := SubStr(sqlTime,1,8)
::cTimeH:= PADR(SubStr(sqlTime,10,3),3,"0")
::SqlDate:=::cDate+" "+::cTime+"."+::cTimeH
RETURN ::SqlDate
Was mir noch fehlt ist die Zeitberechnung.