Sign in to follow this  
Followers 0
pandersen

Converting Unix timestamps to human readable in PLC

7 posts in this topic

Hi, I'm looking for a way to convert a unix timestamp into year, month, day, hour, minute, and second human readable format. I've gotten something that approximates the date, but I need it to be exact. All the google results use date/time functions built in to other programming languages, which the PLC (ControlLogix) has none. Does anyone have specific steps to extract the current date from a unix timestamp? -Pete

Share this post


Link to post
Share on other sites
What kind of PLC are you using?

Share this post


Link to post
Share on other sites
AB ControlLogix But it shouldn't matter, I should only need basic math like divide, subtract, modulo, etc due to the lack of date specific functions in most PLCs.

Share this post


Link to post
Share on other sites
Ok, I managed to get something accurate. Dang leap years! In the steps below I am using a timestamp of 1203161493 which corresponds to a date/time of 2-15-2008 11:31:33. I'm ignoring timezones and whatnot, it isn't necessary for this. Steps: 1. Unix timestamp / hours in a year to get years from 1970 to timestamp ex: 1203161493 / 31436000 = 38.152... years since 1970. Ignoring the decimals, thats 38 years + 1970 = 2008. 2. Determine number of leap years from 1970 to year found in step 1 (extra days). ex: (2008-1969)/4 = 9.75. Again, ignore the decimal, and we have 9 extra days (we ignore this year's leap day until later) 3. Determine the number of days since the epoch. ex: 1203161493 / 86400 = 13925.480... days since epoch. Ignore the decimals again. 4. Subtract leap days from number of days since epoch. ex: 13925 - 9 = 13916. 5. Modulo the number above by the number of days in a year to find the days passed in the current year. ex: 13916 % 365 = 46 days this year. 6. We go through each month and subtract it until the days left are less than the month's total days. If this year is a leap year and your days in this year found in step 5 was greater than 59 (31+28), we would add one. ex: 46 - 31 days in Jan = 15 days (in 2nd month) = Feb 15. 6. Find the number of seconds in the current day. Subtract the days since epoch found in step 3 from the timestamp. ex: 1203161493 - (13925 * 86400) = 41493 seconds 7. Figure out how many hours the seconds found in step 6 is. ex: 41493 / 3600 = 11.5283... hours. Ignore the decimal again. 8. Find the number of minutes left. Subtract the hours you found in the previous step from the seconds in step 6, then divide by 60. ex: 41493 - (11 * 3600) = 1893 1893 / 60 = 31.55 minutes. Ignore the decimal 9. Find the number of seconds left. Subtract the minutes in step 8 from the seconds in step 8 ex: 1893 - (31 * 60) = 33 seconds. Put it all together: Year: 2008 Month: 2 Day: 15 Hour: 11 Minute: 31 Second: 33 If anything was unclear, let me know and I'll try to explain it better. -Pete Edited by pandersen

Share this post


Link to post
Share on other sites
Only thing to add is the definition of a "unix timestamp" Edited by OkiePC

Share this post


Link to post
Share on other sites
Wow - I didn't notice any potential problems going through it, besides the fact that it won't work after Jan 19, 2038 . There are a lot of Javascript based sites and PHP scripts outs there that will quickly do the conversion. I couldn't find anything helpful (using fundamental math). I'm guessing that the Perl geeks could probably do it a little more concisely, but who cares. It looks like you did a heck of a job with that. It would probably be useful to people if you could post your Logix code snippet under the downloads section.

Share this post


Link to post
Share on other sites
Google the words "doomsday algorithm". It's not the exact algorithm but related ones will get you in the ballpark. The doomsday algorithm is the one that is used to calculate the day of the week given any date. It is also known as the "Domesday algorithm".

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0