xref: /petsc/src/sys/time/fdate.c (revision 10450e9e44b354a0a3da7bbd573407bdf051df10)
1e5c89e4eSSatish Balay 
2c6db04a5SJed Brown #include <petscsys.h>
3e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
4e5c89e4eSSatish Balay   #include <sys/time.h>
5e5c89e4eSSatish Balay #endif
6e5c89e4eSSatish Balay #include <time.h>
7e5c89e4eSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
88cc058d9SJed Brown PETSC_EXTERN int gettimeofday(struct timeval *, struct timezone *);
9e5c89e4eSSatish Balay #endif
10e5c89e4eSSatish Balay 
11e5c89e4eSSatish Balay /*@C
12e5c89e4eSSatish Balay   PetscGetDate - Gets the current date.
13e5c89e4eSSatish Balay 
1420f4b53cSBarry Smith   Not Collective
15e5c89e4eSSatish Balay 
16e5c89e4eSSatish Balay   Input Parameter:
17e5c89e4eSSatish Balay . len - length of string to hold date
18e5c89e4eSSatish Balay 
19e5c89e4eSSatish Balay   Output Parameter:
20e5c89e4eSSatish Balay . date - the date
21e5c89e4eSSatish Balay 
22e5c89e4eSSatish Balay   Level: beginner
23e5c89e4eSSatish Balay 
24811af0c4SBarry Smith   Note:
25811af0c4SBarry Smith   This function makes a system call and thus SHOULD NOT be called from an error handler.
26811af0c4SBarry Smith 
27aec76313SJacob Faibussowitsch   Developer Notes:
28811af0c4SBarry Smith   This function is called once during `PetscInitialize()`.
29811af0c4SBarry Smith   It stashes the timestamp, and uses it when needed. This is so that
30811af0c4SBarry Smith   error handlers may report the date without generating possible
31811af0c4SBarry Smith   additional system errors during the call to get the date.
32e5c89e4eSSatish Balay 
33*10450e9eSJacob Faibussowitsch .seealso: `PetscGetHostName()`
34e5c89e4eSSatish Balay @*/
35d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetDate(char date[], size_t len)
36d71ae5a4SJacob Faibussowitsch {
370298fd71SBarry Smith   char *str = NULL;
38e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
39e5c89e4eSSatish Balay   time_t aclock;
40e5c89e4eSSatish Balay #else
41e5c89e4eSSatish Balay   struct timeval tp;
42e5c89e4eSSatish Balay #endif
43e5c89e4eSSatish Balay 
44e5c89e4eSSatish Balay   PetscFunctionBegin;
45e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
46e5c89e4eSSatish Balay   time(&aclock);
479566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len));
48e5c89e4eSSatish Balay #else
49e5c89e4eSSatish Balay   gettimeofday(&tp, (struct timezone *)0);
509566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len));
51e5c89e4eSSatish Balay #endif
52e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
539566063dSJacob Faibussowitsch   PetscCall(PetscStrstr(date, "\n", &str));
54e5c89e4eSSatish Balay   if (str) str[0] = 0;
553ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
56e5c89e4eSSatish Balay }
57