Solved

date variable

Posted on 2004-08-11
8
209 Views
Last Modified: 2010-04-01
Hi,

I have a series of structs in a program.  One of the structs listed here
//Date struct
struct Date{
      int day;
      int month;
      int year;
};
requires 2 functions
fileInputDate- to read a date in the format dd/mm/yyyy from a text file and return a variable of type Date.
outputDate- to display a Date variable in an acceptable format.
I need to know what type of data is best to use for the date variable.
Thanks

Kaz


0
Comment
Question by:KazIT
8 Comments
 
LVL 11

Expert Comment

by:avizit
ID: 11781448
guess your structure is good enough for date

though you can make them as unsigned ints.

as in
struct date{
     unsigned int day;
    unsigned int month;
     unsigned int year;
};


depending on your needs you may also decide to use enum data types for those






0
 
LVL 11

Expert Comment

by:Jase-Coder
ID: 11781841
to save some memory you could set your variables to:

struct date{
   short unsigned int day;
   short unsigned int month;
   short  unsigned int year;
};
0
 
LVL 16

Expert Comment

by:nonubik
ID: 11781862
or even

struct date{
   unsigned char day;
   unsigned char month;
   unsigned short year;
};
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 11782700
I prefer to have an integer date yyyymmdd as data member like that:

class Date
{
     int date;
public:
     Date(const string& strDate) : date(0)
     {
          int d, m, y;
          istringstream istr(strDate);
          istr >> d; if (istr.fail()) return;
          istr >> m; if (istr.fail()) return;    
          istr >> y; if (istr.fail()) return;  
          y = (y < 50)? 2000+y : (y < 100)? 1900 + y : y;
          if ((y < 1000 || y > 2200) ||
              (m < 1    || m > 12  ) ||
              (d < 1    || d > 31  ) ||
              (d == 31 && 
                (m == 4 || m == 6 || m == 9 || m == 11)
              )                      ||
              (m == 2 && 
                 (d > 28 + leap(y) )
              )
             )
          {
               return;
          }
          date = y*10000 + m*100 + d;
     }
     int leap(int y) { return ((y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0))? 1 : 0; }
     bool isValidDate() { return date != 0; }
     string getDateAsString()
     {   stringstream ss;
          ss << date % 100 << '/' << (date%10000) / 100 << '/' << date/10000;
          return ss.str();
     }
};

Regards, Alex

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 86

Expert Comment

by:jkr
ID: 11784236
>>I need to know what type of data is best to use for the date variable.

Use what the C/C++ runtime libraries use - a 'time_t', which is nothing but a 'long int'.
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 11784338
>> Use what the C/C++ runtime libraries use - a 'time_t'

time_t is the number of seconds elapsed since midnight (00:00:00), January 1, 1970, so i wouldn't recommend it for a Date class.

Regards, Alex
0
 
LVL 86

Expert Comment

by:jkr
ID: 11784362
Why not? The date is included. And, it only uses 4 bytes of space. Since all POSIX conformant systems rely on that...
0
 
LVL 39

Accepted Solution

by:
itsmeandnobodyelse earned 500 total points
ID: 11784422
>> The date is included

But my birthday couldn't be stored with that ... ;-)

>> Since all POSIX conformant systems

All younger than me ...

Regards, Alex




0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
  Included as part of the C++ Standard Template Library (STL) is a collection of generic containers. Each of these containers serves a different purpose and has different pros and cons. It is often difficult to decide which container to use and …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now