On Mon, 2012-01-23 at 16:45 +0100, Roger Oberholtzer wrote:
The Linux/UNIX gettimeofday() function reports the time in the current Epoch. That Epoch is defined as starting "00:00:00 UTC, January 1, 1970"
Yep.
C# provides a DateTime interface with a similar concept of time in the current Epoch. Just to make life interesting, C# defines the Epoch as being "12:00:00, January 1, 0001". (Note the mysterious absence of UTC in that start...)
Yep.
This is, of course, just some offset. My problem is that I am trying to find out if the offset is some agreed international standard. I must be looking in the wrong place. I see lots of C# code to fiddle with this. But what about us crazy C programmers on Linux?
Different platforms use different epochs. Various RDBMSs for example use different epochs to persist dates & times.
For example, System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); tells the time in the C# Epoch at the start of the Linux/UNIX epoch. I guess I could run this once and save the result as an offset. But I would be a bit happier if there was some agreed value for this so I do not chance getting a bad value from some buggy C# implementation. I'm a suspicious type of guy sometimes.
Don't use offsets like this. If you need to pass date values between heterogenous systems it is both safer and easier to 'export' the date to a standard string representation and then parse that standard string representation 'on the other side' [like ISO8601 - every platform has a way to process those datetime values]. Tiemstamps are evil; I avoid storing them.
This question has arisen because we I am integrating some fancy Danish reflection measurement device into our Linux apps. The data provided by these devices is timestamped with UTC time - encoded with the C# DateTime functions, e.g., 5246315282908540247, which must have been around 1400 UTC today.
Ugh. That sucks.
Has anyone made an interface between the Linux Epoch and the C# Epoch?
No. It would be interesting to see what happens as you cross time zones or enter or leave day light savings time periods.
It seems to me that for this to work, all involved parties must agree on the elapsed time between C# Epoch start and some more recent Epoch that has greater agreement on how elapsed time is calculated.
Or, better, stop storing timestamps. You know what time it is, store that, not some integer. -- System & Network Administrator [ LPI & NCLA ] http://www.whitemiceconsulting.com OpenGroupware Developer http://www.opengroupware.us Adam Tauno Williams