[AccessD] UNIX time. Was: Crack Code

Mark A Matte markamatte at hotmail.com
Fri Mar 23 12:23:53 CDT 2007


Thanks for the code and compliments.  After I found the OBJID to be a six 
character alpha numeric representing the number of seconds past UNIX 
time(epoch?)...and that they used a 36 base counting system...below is the 
function I created. (tblKey is a table with 2 columns...the 36 char and 
their values)

Function DeCode(OBJID As String)
Dim P_One
Dim P_Two
Dim P_Three
Dim P_Four
Dim P_Five
Dim P_Six

P_One = Left(OBJID, 1)
P_Two = Mid(OBJID, 2, 1)
P_Three = Mid(OBJID, 3, 1)
P_Four = Mid(OBJID, 4, 1)
P_Five = Mid(OBJID, 5, 1)
P_Six = Mid(OBJID, 6, 1)

P_One = DLookup("[Val] ", "tblKey", "[char]= '" & P_One & "'")
P_Two = DLookup("[Val] ", "tblKey", "[char]= '" & P_Two & "'")
P_Three = DLookup("[Val] ", "tblKey", "[char]= '" & P_Three & "'")
P_Four = DLookup("[Val] ", "tblKey", "[char]= '" & P_Four & "'")
P_Five = DLookup("[Val] ", "tblKey", "[char]= '" & P_Five & "'")
P_Six = DLookup("[Val] ", "tblKey", "[char]= '" & P_Six & "'")

P_One = P_One * 60466176
P_Two = P_Two * 1679616
P_Three = P_Three * 46656
P_Four = P_Four * 1296
P_Five = P_Five * 36
P_Six = P_Six

DeCode = DateAdd("s", (P_One + P_Two + P_Three + P_Four + P_Five + P_Six), 
#12/31/69 4:00:00 PM#)

End Function

Any better ideas...please let me know.

Thanks,

Mark A. Matte


>From: "Gustav Brock" <Gustav at cactus.dk>
>Reply-To: Access Developers discussion and problem 
>solving<accessd at databaseadvisors.com>
>To: <accessd at databaseadvisors.com>
>Subject: Re: [AccessD] UNIX time. Was: Crack Code
>Date: Fri, 23 Mar 2007 17:45:51 +0100
>
>Hi Mark and Matty
>
>Nice exploration!
>Incredible what some did those days to save a few bytes to cut the 
>diskspace and cost.
>
>I found a couple of functions for converting to and from UNIX time:
>
>Public Function DateFromUnix( _
>   ByVal dblSeconds As Double, _
>   Optional lngLocalTimeBias As Long) _
>   As Date
>
>' Converts UNIX time value to UTC date value.
>' Optionally, a local time bias can be specified;
>' this must be in minutes with a resolution of 15 minutes.
>'
>' Examples:
>'   UTC. dblSeconds: 1000000000, lngLocalTimeBias: 0
>'     2001-09-09 01:46:40
>'   CET. dblSeconds: 1000000000, lngLocalTimeBias: -60
>'     2001-09-09 02:46:40
>'
>' 2004-03-23. Cactus Data ApS. CPH.
>
>   ' UNIX UTC start time.
>   Const cdatUnixTimeZero    As Date = #1/1/1970#
>   ' Maximum time bias, 12 hours.
>   Const clngTimeBiasMax     As Long = 12& * 60&
>   ' Count of seconds of one day.
>   Const clngSecondsPerDay   As Long = 24& * 60& * 60&
>
>   Dim dblDays               As Double
>   Dim dblDaysSeconds        As Double
>   Dim lngSeconds            As Long
>   Dim datTime               As Date
>
>   ' Limit intervals for DateAdd to Long to be acceptable.
>   dblDays = Int(dblSeconds / clngSecondsPerDay)
>   dblDaysSeconds = dblDays * clngSecondsPerDay
>   lngSeconds = dblSeconds - dblDaysSeconds
>
>   datTime = DateAdd("d", dblDays, cdatUnixTimeZero)
>   datTime = DateAdd("s", lngSeconds, datTime)
>   If lngLocalTimeBias <> 0 Then
>     If Abs(lngLocalTimeBias) < clngTimeBiasMax Then
>       datTime = DateAdd("n", -lngLocalTimeBias, datTime)
>     End If
>   End If
>
>   DateFromUnix = datTime
>
>End Function
>
>Public Function UnixTimeValue( _
>   ByVal datTime As Date, _
>   Optional ByVal lngLocalTimeBias As Long) _
>   As Double
>
>' Converts UTC date value to UNIX time value.
>' Optionally, a local time bias can be specified;
>' this must be in minutes with a resolution of 15 minutes.
>'
>' Examples:
>'   UTC. datTime: #09/09/2001 01:46:40#, lngLocalTimeBias: 0
>'     1000000000
>'   CET. datTime: #09/09/2001 02:46:40#, lngLocalTimeBias: -60
>'     1000000000
>'
>' 2004-03-23. Cactus Data ApS. CPH.
>
>   ' UNIX UTC start time.
>   Const cdatUnixTimeZero    As Date = #1/1/1970#
>   ' Maximum time bias, 12 hours.
>   Const clngTimeBiasMax     As Long = 12& * 60&
>
>   Dim dblSeconds            As Double
>
>   If lngLocalTimeBias <> 0 Then
>     If Abs(lngLocalTimeBias) < clngTimeBiasMax Then
>       datTime = DateAdd("n", lngLocalTimeBias, datTime)
>     End If
>   End If
>   dblSeconds = DateDiff("s", cdatUnixTimeZero, datTime)
>
>   UnixTimeValue = dblSeconds
>
>End Function
>
>Have fun!
>
>/gustav
>
> >>> markamatte at hotmail.com 23-03-2007 15:00 >>>
>Thanks Marty,
>
>I found that it is actually counting from UNIX time 1/1/1970 00:00:00
>UTC...which happens to be 12/31/1969 4:00:00 PM in my time zone.  it is a 
>36
>base counting system...and I had to shift my initial logic ove 2 spaces.
>You take the following and add all of the results to come up with a single
>number...this number is how many seconds have passed since your start time.
>
> >> > 1st  Value*60466176
> >> > 2nd  Value*1679616
> >> > 3rd  Value*46656
> >> > 4th  Value*1296
> >> > 5th  Value*36
> >> > 6th  Value
>
>The last 2 are irrelevant when converting back to time...they are there for
>when more than 1 record is created in a single second.
>
>Thanks again,
>
>Mark A. Matte
>
> >From: MartyConnelly <martyconnelly at shaw.ca>
> >Reply-To: Access Developers discussion and problem
> >solving<accessd at databaseadvisors.com>
> >To: Access Developers discussion and problem
> >solving<accessd at databaseadvisors.com>
> >Subject: Re: [AccessD] OT(kinda): Crack Code
> >Date: Thu, 22 Mar 2007 18:32:50 -0700
> >
> >  I played around with this last night and figured out it was based on 
>some date in 1974
> >with AM and PM being indicated by last two characters and first 6 as 
>seconds
> >from the start date whatever that is, still  it seems a little out as to 
>accuracy
>
>
>--
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com

_________________________________________________________________
i'm making a difference. Make every IM count for the cause of your choice. 
Join Now. 
http://clk.atdmt.com/MSN/go/msnnkwme0080000001msn/direct/01/?href=http://im.live.com/messenger/im/home/?source=hmtagline




More information about the AccessD mailing list