944,201 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 3126
  • C++ RSS
You are currently viewing page 1 of this multi-page discussion thread
May 26th, 2005
0

2038 Problem

Expand Post »
Hi,
After completing my Date class, I realize that I am suffering from the 2038 problem. (As described here-> http://pw1.netcom.com/~rogermw/Y2038.html). Does anyone know which libraries (or which code) I need to switch to on *nix systems to overcome this? (I know windows has someting like mktime64 (instead of mktime).

Google returns lots of info about the problem, nothing really about the solution...

Thanks,
Winbatch
Reputation Points: 68
Solved Threads: 18
Posting Pro in Training
winbatch is offline Offline
466 posts
since Feb 2005
May 26th, 2005
0

Re: 2038 Problem

Could you describe your problem with this in more detail?
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
May 26th, 2005
0

Re: 2038 Problem

Sure, basically I have a date class that I wrote which wraps time_t. time_t and its associated functions mktime, localtime, etc do not function after January 19, 2038. (This is a known issue and is not related to my specific class). Attempts to use dates greater than that cause undefined behavior. (Basically attempting to go over the maximum value of an int).

My question was whether there are replacements for time_t (standard C++ only) that can deal with this. (I'm covered on windows since they created a time_64)
Reputation Points: 68
Solved Threads: 18
Posting Pro in Training
winbatch is offline Offline
466 posts
since Feb 2005
May 26th, 2005
0

Re: 2038 Problem

From some bits I'd read a while ago, that I haven't been able to find again, it's a problem for the generated executable -- not necessarily the source code. For example, in 2011 the world runs 64-bit workstations: you recompile with a 64-bit unsigned int-based time_t and you're fine for a good while. Running today's application for the next 33 years, however, would be problematic.

But unfortunately, I haven't dug up any current non-standard replacement functions.
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
May 26th, 2005
0

Re: 2038 Problem

Right - basically I'm looking to see if this:

64-bit unsigned int-based time_t

exists already on unix. If so, I would compile with it now..
Reputation Points: 68
Solved Threads: 18
Posting Pro in Training
winbatch is offline Offline
466 posts
since Feb 2005
May 26th, 2005
0

Re: 2038 Problem

Which flavor of Unix (not that my searches will be any better than yours)? And what target processor?
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
May 27th, 2005
0

Re: 2038 Problem

SunOS ... 5.8 Generic_108528-14 sun4u sparc SUNW,Sun-Fire-280R

(Basically, solaris 8), using Forte 7 compiler.
Reputation Points: 68
Solved Threads: 18
Posting Pro in Training
winbatch is offline Offline
466 posts
since Feb 2005
May 27th, 2005
0

Re: 2038 Problem

Quote originally posted by winbatch ...
SunOS ... 5.8 Generic_108528-14 sun4u sparc SUNW,Sun-Fire-280R

(Basically, solaris 8), using Forte 7 compiler.
you should be able to write an algorithm for this problem. the problem does not lie in the executeable it lies in the class you are using, all it does is takes the amount of seconds since sometime in 1969 and using division seperates it into days years and dates. because this is seconds the MAX_INT_SIZE is reached fairly quickly. but if you were to take the raw data and and find a away to see if it "rolled" you can just add the return value to the max int value in an array form then do all your calculations with that number. there is a big number factorial calculator that i belive does this on this site.
Just my thoughts.
Reputation Points: 10
Solved Threads: 0
Light Poster
sinrtb is offline Offline
32 posts
since Apr 2005
May 27th, 2005
0

Re: 2038 Problem

I would prefer not to have to rewrite all of the calculations performed by mktime, localtime, etc. just to accomplish this....

I've already fixed my code on windows by simply using __time_64_t instead of the time_t. I'm just looking for a unix equivalent.
Reputation Points: 68
Solved Threads: 18
Posting Pro in Training
winbatch is offline Offline
466 posts
since Feb 2005
May 27th, 2005
0

Re: 2038 Problem

Quote originally posted by sinrtb ...
all it does is takes the amount of seconds since sometime in 1969 and using division seperates it into days years and dates.
That sounds a little naïve; dates and times do have their many little issues.
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: A Begginner Needs your help!!!!
Next Thread in C++ Forum Timeline: Playing with shared memory - problem with non 'simple' data types





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC