Solved

(BCB5) TDateTime conversion

Posted on 2002-03-19
6
1,295 Views
Last Modified: 2012-06-27
Greetings,

I am looking for functions which can convert from a TDateTime to a time_t and vice versa.
Please can someone help me ?

Thanks,

Robert
0
Comment
Question by:zaroblan
  • 3
  • 2
6 Comments
 
LVL 6

Expert Comment

by:DrDelphi
ID: 6881670
The following example converts a time_t value to a file time, using the Int32x32To64 function.

void TimetToFileTime( time_t t, LPFILETIME pft )
{
    LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
    pft->dwLowDateTime = (DWORD) ll;
    pft->dwHighDateTime = ll >>32;
}
After you have obtained a file time, you can convert this value to system time using the FileTimeToSystemTime function.

Then you can use the FileDateToDateTime to get your TDateTime.




Good luck!!

         
0
 

Author Comment

by:zaroblan
ID: 6881777
Are there no available functions to do this without needing to use three levels of indirection ?
0
 
LVL 2

Accepted Solution

by:
LoungeLizard earned 100 total points
ID: 6882012
Well, TDateTime is effectively a double, indicating the number of days since 30/12/1899 00:00:00 and time_t is an long int that indicates the number of seconds since 1/1/1970 00:00:00 which means there is a constant difference between them. Just figure out what that is (use Excel or whatever) and use that in conversions.
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:zaroblan
ID: 6882041
// According to the online help "time_t" is just a "long" which contains
// the number of seconds since 1st Jan 1970 0:00:00 GMT. And it says that
// TDateTime has a constructor which takes a double representing the number
// of days since 31st Dec 1899.

const int EpochDiff = 25569; // days between 30/12/1899 and 01/01/1970
const int SecsInDay = 86400; // number of seconds in a day

TDateTime TimeT_TDateTime(time_t Convertee)
{
  TDateTime Result(((double)Convertee) / SecsInDay + EpochDiff);
  return Result;
}

// Now to reverse this operation you can cast a TDateTime into a
// double and then apply the reverse mathematics:

time_t TDateTime_TimeT(TDateTime Convertee)
{
  time_t Result((long)((((double)Convertee) - EpochDiff) * SecsInDay));
  return Result;
}
0
 
LVL 2

Expert Comment

by:LoungeLizard
ID: 6882072
Yup, that's what I meant.
0
 

Author Comment

by:zaroblan
ID: 6882092
Thanks for the pointer in the right direction ... would have been rated as excellent if you had supplied a code sample :)
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

743 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

15 Experts available now in Live!

Get 1:1 Help Now