1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 <2013> 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 <2013> 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | EPICS UTC Time conversion |
From: | Eric Norum <[email protected]> |
To: | "[email protected] Talk" <[email protected]> |
Date: | Tue, 16 Apr 2013 13:18:03 -0700 |
I'm trying to convert an EPICS time stamp into a string -- but in UTC, not the local time zone. Here's my failing attempt: epicsTimeStamp timestamp; epicsTimeStamp utc; struct tm ™; unsigned long nsec; char cbuf[80]; …… epicsTimeToGMTM(&tm, &nsec, ×tamp); epicsTimeFromTM(&utc, &tm, 0); epicsTimeToStrftime(cbuf, sizeof cbuf, "%F_%T", &utc); The resultant string is one hour off. It's as if the routines above are trying to apply daylight savings time correction to UTC. For example, consider the following POSIX time stamp:
If, in the above code, I set timestamp.secPastEpoch = 1366124582 - POSIX_TIME_AT_EPICS_EPOCH; timestamp.nsec = 0; The resultant string is: 2013-04-16_16:03:02 See how the hours are '16' instead of '15'. So, what's the trick to getting a true UTC time string from an EPICS time stamp? |