Epoch time, Do most people know ?


Closed Thread
Results 1 to 9 of 9

Hybrid View

  1. #1
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: Epoch time, Do most people know ?

    But if you are trying to translate NETWORK time, that is the time from Jan 1, 1900

    The code below takes a "brute force" approach, but works. I'm sure some math whiz could
    certainly come up with a better formula.



    HOffset = Local offset from GMT
    Sign = 1 if you are EARLIER than GMT
    Sign = 2 if you are LATER than GMT ("+")
    DST = 1 if you are using DST

    The program takes a "shortcut" in that it calculates time since Jan 1, 2000


    Code:
      
                   IF sign = "1" then
                      if DST = 1 and HOffset = 0 THEN 
                           Sign = "2"
                           GOTO OtherSide
                      ENDIF     
                        
                         TimeNow = Timenow - ((HOffset - DST) * 3600)
                   ENDIF
                 
    OtherSide:             
                   IF Sign = "2" THEN
                   
                      TimeNow = TimeNow + ((Hoffset + DST) * 3600)
                   ENDIF   
                                         
                    SINCEJAN2009 = TIMENOW - 3439756800   ; 3439756800 is the #of sec from Jan1 1900 to Jan1 2009
                   
                    RUNNINGSECONDS = SINCEjAN2009
                    YR = 2009
                    
    GETYEAR:
            
                        LEAP = (YR//4)    ; = 0 if leap year
                        
                        if LEAP = 0 then
                            SecondsInYear = 31622400 ;366*60*60**24
                         
                        ELSE
                            SecondsInYear = 31536000 ;365*60*60*24
                         
                        endif
                           
                        If RunningSeconds > SecondsInYear Then
                            RunningSeconds = RunningSeconds - SecondsInyear
                            YR = YR + 1
                            GOTO GetYear
                        ENDIF
                   
                     Mo = 1 ; Start with Month = 1  
                     
            
    GETMONTH:        
                    IF LEAP > 0 THEN
                       lookup2 MO,[0,2678400,2419200,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400],SecondsInMonth
                    ELSE
                       LOOKUP2 MO,[0,2678400,2505600,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400],SecondsInMonth
                    ENDIF
                    
                    If RunningSeconds >= SecondsInMonth THEN
                       RunningSeconds = RunningSeconds - SecondsInMonth
                    
                    MO = MO + 1
                    GOTO GETMONTH
                    ENDIF   
    FINDDAYS:
            
                    DA = RUNNINGSECONDS/86400
                    RUNNINGSECONDS = RUNNINGSECONDS//86400
         
                    HR = RUNNINGSECONDS/3600 
                    RUNNINGSECONDS = RUNNINGSECONDS//3600
           
                    MN = RUNNINGSECONDS/60
                    RUNNINGSECONDS = RUNNINGSECONDS//60
                    SC = RUNNINGSECONDS
                
                    Da = Da + 1
                   HSEROUT [13,10,13,10,DEC2 HR,":",DEC2 MN,":",DEC2 SC,"   ",DEC2 MO,"/",DEC2 DA,"/",#YR,13,10]
    Charles Linquist

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,625


    Did you find this post helpful? Yes | No

    Default Re: Epoch time, Do most people know ?

    Hi Charles,
    Exactly, with SNTP "time began" at 1/1-1900.
    I see your code uses LONGS which I'm trying to avoid but I'll digest it and see what might come out, thanks for sharing, I appreciate it!

    /Henrik.

  3. #3
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: Epoch time, Do most people know ?

    I guess that I left out some stuff in the code above.

    It is designed for use with a Lantronix XPort. It logs on to port 123 of timeservers and comes back with network time.
    And, yes, you ***MUST*** use 18F chips!



    The stuff that goes before it is -




    Code:
    THEADER[0] = $2           ' STX
    
            THEADER[1] = TSIP1  ' DESTINATION IP
            THEADER[2] = TSIP2
            THEADER[3] = TSIP3
            THEADER[4] = TSIP4
    
            THEADER[5] = 0            ; DESTINATION PORT HIGHBYTE
            THEADER[6] = 123          ; DESTINATION PORT LOWBYTE
                        
            LRC1 = 0
            LRC2 = 0 
          
            For X = 1 to 6
                 LRC1 = LRC1 ^ THeader[x]
            next X
                           
            THEADER[7] = LRC1               
            THEADER[8] = 0               
            THEADER[9] = 48                                             'Data Length lowbyte
        
    ;Send the header
           
              For X = 0 to 9
                HSEROUT2 [THeader[X]]
              Next X   
             
              LRC2 = LRC2 ^ THeader[8]
              LRC2 = LRC2 ^ THeader[9]
            
    ;Send the data
              HSEROUT2 [$1B]
               LRC2 = LRC2 ^ $1B
              For X = 0 To 46
                HSEROUT2 [0]
                LRC2 = LRC2 ^ 0
              NEXT X     
                      
    ;Send the Checksum (LRC)            
             
              HSEROUT2 [LRC2]
    getresponse:         
              
        
             HSERIN2 1000,NoResponse,[Wait($2)]                                                      
             hserin2 200,NoResponse,[SKIP 41,TimeNow.Byte3,TimeNow.Byte2,TimeNow.Byte1,TimeNow.Byte0]
    Charles Linquist

  4. #4
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,625


    Did you find this post helpful? Yes | No

    Default Re: Epoch time, Do most people know ?

    Thanks Charles,
    I'm using the 18LF46K22 and W5100 ethernet chip, the SNTP stuff are done and I get the seconds count from the server, no issues there. It's the conversion from seconds to true time that's bugging me and the reason I'm trying to avoid longs is that it adds a lot of overhead to the program even in sections not actually using longs.

    I'm on my way to convert your convert-routine to use 16 bit variables but it does get a bit messy...

    Thanks again for sharing!
    /Henrik.

  5. #5
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: Epoch time, Do most people know ?

    It shouldn't be too bad - breaking it into 16 bit 'chunks' , you will just have an offset that is not just hours, but hours, minutes and seconds.
    Charles Linquist

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts