DateTime functions

From DataFlex Wiki
Jump to navigationJump to search

ISO8601TimeStamp

Here's a function I use for creating a timestamp, this uses the ISO8601 format as it has advantages such as that it automatically sorts correctly when sorted with ASCII ordering.

This works well even with databases - such as the embedded database - that do not offer native date time formats.

  
  //
  // Returns an ISO8601 timestamp this is used by for example SQLite in date time columns and works
  // wonderfully well within the dataflex database too.
  // You'll need an ascii column of 24 characters
  // the format is:
  // YYYY-MM-DDTHH:MM:SS.SSS
  // This is assuming you do not need timezone information.
  // See also:
  // http://www.sqlite.org/lang_datefunc.html
  //
  Function ISO8601TimeStamp Returns String
    String    sYear
    String    sMonth
    String    sDay
    String    sHour
    String    sMin
    String    sSec
    String    smilSec
    String    sTimeStamp
    DateTime  dtNow
    
    Move (CurrentDateTime())    to dtNow
    Move (DateGetYear(dtNow))        to sYear
    Move (DateGetMonth(dtNow))       to sMonth
    Move (DateGetDay(dtNow))         to sDay
    Move (DateGetHour(dtNow))        to sHour
    Move (DateGetMinute(dtNow))      to sMin
    Move (DateGetSecond(dtNow))      to sSec
    Move (DateGetMillisecond(dtNow)) to smilSec
    
    If (Length(sMonth)=1)  Move ("0"+sMonth)  to sMonth
    If (Length(sDay)=1)    Move ("0"+sDay)    to sDay
    If (Length(sHour)=1)   Move ("0"+sHour)   to sHour
    If (Length(sMin)=1)    Move ("0"+sMin)    to sMin
    If (Length(sSec)=1)    Move ("0"+sSec)    to sSec
    If (Length(smilSec)=1) Move ("0"+smilSec) to smilSec
    If (Length(smilSec)=2) Move ("0"+smilSec) to smilSec
    
    Move (SFormat("%1-%2-%3T%4:%5:%6.%7",sYear,sMonth,sDay,sHour,sMin,sSec,smilSec)) to sTimeStamp
    
    Function_Return sTimeStamp
  End_Function
  

XML DateTime functions

If you have a SOAP service and you need to convert from / to datetime formats then these functions might come in handy.

    
    //
    //  Gets the data and time for the datetime string as passed by
    //  XML. Automatic casting strips of the time part and we do
    //  want the time
    //
    //  Returns:
    //      dtDateTime with the date and time as passed in xml
    //
    Function StringToDateTime String sDateTime Returns DateTime
        String sDate
        String sYear sMonth sDay
        String sHours sMinutes sSeconds
        String sMilliSeconds
        String sTimeString
        Integer iPos
        DateTime dtTime
        
        Move "" to sTimeString
        Move (Pos("T",sDateTime)) to iPos
        If (iPos>0) Begin
          Move (Left(sDateTime,iPos-1)) to sDate
          Move (Left(sDate,4))  to sYear
          Move (Mid(sDate,2,6)) to sMonth
          Move (Right(sDate,2)) to sDay
          //Move sDate to dtTime // does not work, because US has no military date format
          Move (Replace(sDate+"T",sDateTime,"")) to sTimeString
          //  Extract parts
          Move (Mid(sTimeString, 2, 1))  to sHours
          Move (Mid(sTimeString, 2, 4))  to sMinutes
          Move (Mid(sTimeString, 2, 7))  to sSeconds
          Move (Mid(sTimeString, 3, 10)) to sMilliSeconds
        End
        
        //  Set to DateTime
        Move (DateSetYear(dtTime,      Integer(sYear)))    to dtTime
        Move (DateSetMonth(dtTime,     Integer(sMonth)))   to dtTime
        Move (DateSetDay(dtTime,       Integer(sDay)))     to dtTime
        Move (DateSetHour(dtTime,      Integer(sHours)))   to dtTime
        Move (DateSetMinute(dtTime,    Integer(sMinutes))) to dtTime
        Move (DateSetSecond(dtTime,    Integer(sSeconds))) to dtTime
        Move (DateSetMilliSecond(dtTime, Integer(sMilliSeconds))) to dtTime
        
        Function_Return dtTime
    End_Function

    
    //
    //  Gets the datetime as passed by XML.
    //  Automatic casting strips of the Time part and we do
    //  want the time
    //
    //  Returns:
    //      DateTime string with the date and time as passed in xml
    //
    Function DateTimeToString DateTime dtTime Returns String
        String sYear sMonth sDay
        String sHours sMinutes sSeconds
        String sMilliSeconds
        String sTimeString
        
        Move "" to sTimeString
        
        Move (DateGetYear(dtTime))        to sYear
        Move (DateGetMonth(dtTime))       to sMonth
        If (Integer(sMonth)<10) Move ("0"+sMonth) to sMonth
        Move (DateGetDay(dtTime))         to sDay
        If (Integer(sDay)<10)   Move ("0"+sDay) to sDay
        Move (DateGetHour(dtTime))        to sHours
        If (Integer(sHours)<10) Move ("0"+sHours) to sHours
        Move (DateGetMinute(dtTime))      to sMinutes
        If (Integer(sMinutes)<10) Move ("0"+sMinutes) to sMinutes
        Move (DateGetSecond(dtTime))      to sSeconds
        If (Integer(sSeconds)<10) Move ("0"+sSeconds) to sSeconds
        Move (DateGetMilliSecond(dtTime)) to sMilliSeconds
        Move (sYear+"-"+sMonth+"-"+sDay+"T"+sHours+":"+sMinutes+":"+sSeconds+"."+sMilliSeconds) to sTimeString
        Function_Return sTimeString
    End_Function