Solved

date variable

Posted on 2004-08-11
8
218 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

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.

Question has a verified solution.

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

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
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 user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

730 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