Link to home
Start Free TrialLog in
Avatar of KazIT
KazIT

asked on

date variable

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


Avatar of avizit
avizit

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






to save some memory you could set your variables to:

struct date{
   short unsigned int day;
   short unsigned int month;
   short  unsigned int year;
};
or even

struct date{
   unsigned char day;
   unsigned char month;
   unsigned short year;
};
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

Avatar of jkr
>>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'.
>> 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
Why not? The date is included. And, it only uses 4 bytes of space. Since all POSIX conformant systems rely on that...
ASKER CERTIFIED SOLUTION
Avatar of itsmeandnobodyelse
itsmeandnobodyelse
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial