Solved

(BCB5) TDateTime conversion

Posted on 2002-03-19
6
1,300 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
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 

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

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
object modeling - load and save functions 5 62
Would like to move button in a function 3 79
FMX TCameraComponent Problem 2 84
What is sub-make ? 2 71
Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
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.

860 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