Convert time_t to char?

J

Jonathan

I have taken up C++ programming again and need to write a socket client,
so far I am able to create the connection to the socket.

As I need a unix timestamp in char to put on a socket in a HTTP 1.1 GET
request I am looking for a way to convert the unix timestamp to a char?

I am using the following code to generate my unix timestamp:

...

time_t mytime; /* calendar time */
mytime=time(NULL); /* get current cal time */

char chTime[10];

// Here I would like to do some conversion

strcpy (buffer, "GET /?t=" . chTime .
"HTTP/1.1\r\nHost: localhost\r\n\r\n");

write(clientSocket, buffer, sizeof(buffer) -1);

...

Any help is appreciated.

Thank in advance,

Jonathan
 
J

Jonathan

Victor said:
What do you expect, really? We have no idea what your server
needs you to do.


The syntax with dots is not an acceptable way,
of course, but you probably know that already. Try 'sprintf'
instead:

I am aware of that. The dots where there to indicate there is code
before and after as I just cut-and-pasted from my source.

Jonathan
 
J

Jim Langston

Jonathan said:
I have taken up C++ programming again and need to write a socket
client, so far I am able to create the connection to the socket.

As I need a unix timestamp in char to put on a socket in a HTTP 1.1
GET request I am looking for a way to convert the unix timestamp to a
char?
I am using the following code to generate my unix timestamp:

...

time_t mytime; /* calendar time */
mytime=time(NULL); /* get current cal time */

char chTime[10];

// Here I would like to do some conversion

strcpy (buffer, "GET /?t=" . chTime .
"HTTP/1.1\r\nHost: localhost\r\n\r\n");

write(clientSocket, buffer, sizeof(buffer) -1);

Microsoft Visual C++ .net 2003 has asctime. I'm not sure if this is
standard or not. See if your implemenation uses it.
Apparently it's used like:

#include <time.h>
#include <stdio.h>

struct tm *newtime;
time_t aclock;

int main( void )
{
time( &aclock ); // Get time in seconds
newtime = localtime( &aclock ); // Convert time to struct tm form

/* Print local time as a string */
printf( "Current date and time: %s", asctime( newtime ) );
}
 
J

Jerry Coffin

[ ... ]
Microsoft Visual C++ .net 2003 has asctime. I'm not sure if this is
standard or not. See if your implemenation uses it.

Yes, asctime is standard. If you don't want the (one) format it can
provide, take a look at strftime, which is a bit like printf, but
specifically for time values.
 
J

James Kanze

Why the question mark? Are you asking us whether you're
looking?
Besides, doesn't your server dictate how to do the conversion?

He said it was HTTP. The HTTP RFC's allow one of three formats.
The preferred format is "%a, %d %b %Y %H:%M:%S GMT", formatted
with strftime, in the "C" locale (which can make for some fun in
a multithreaded environment). Note that the time *must* be
specified in UTC, which means that the program must use
gmtime(), and not localtime(), in order to obtain the tm passed
to strftime.
I am using the following code to generate my unix timestamp:
...
time_t mytime; /* calendar time */
mytime=time(NULL); /* get current cal time */
char chTime[10];
// Here I would like to do some conversion
strcpy (buffer, "GET /?t=" . chTime .
"HTTP/1.1\r\nHost: localhost\r\n\r\n");
write(clientSocket, buffer, sizeof(buffer) -1);
...
Any help is appreciated.
What do you expect, really? We have no idea what your server
needs you to do.

You don't (and he really should have specified the desired
format when posting here), but it's part of a standard (RFC
2616). Of course, when asking questions here, he really
shouldn't suppose that standard to be universally known. (And
of course, if he's writing anything to do with HTTP at the
socket level, he definitely should have a copy of that standard
on hand.)
The syntax with dots is not an acceptable way, of course, but
you probably know that already. Try 'sprintf' instead:
sprintf(buffer, "GET /?t=" <some kind of format here>
" HTTP/1.1\r\nHost: localhost\r\n\r\n", mytime);
The format could be %d for all I know, but that's something
you need to find out from the documentation for your server.

Don't use sprintf for this. Or for anything else. For
formatting time, you're more or less stuck with strftime() (but
at least that takes the buffer length, rather than just
overwriting the end of the buffer---and the required format is a
lot longer than the 10 characters he's provided). For building
up the entire GET line, of course, std::eek:stringstream is
indicated.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,994
Messages
2,570,222
Members
46,810
Latest member
Kassie0918

Latest Threads

Top