Solved

date variable

Posted on 2004-08-11
8
217 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
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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
 
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
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.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

808 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