xref: /petsc/src/sys/time/fdate.c (revision 834855d6effb0d027771461c8e947ee1ce5a1e17)
1c6db04a5SJed Brown #include <petscsys.h>
2e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
3e5c89e4eSSatish Balay   #include <sys/time.h>
4e5c89e4eSSatish Balay #endif
5e5c89e4eSSatish Balay #include <time.h>
6e5c89e4eSSatish Balay 
7e5c89e4eSSatish Balay /*@C
8e5c89e4eSSatish Balay   PetscGetDate - Gets the current date.
9e5c89e4eSSatish Balay 
1020f4b53cSBarry Smith   Not Collective
11e5c89e4eSSatish Balay 
12e5c89e4eSSatish Balay   Input Parameter:
13e5c89e4eSSatish Balay . len - length of string to hold date
14e5c89e4eSSatish Balay 
15e5c89e4eSSatish Balay   Output Parameter:
16e5c89e4eSSatish Balay . date - the date
17e5c89e4eSSatish Balay 
18e5c89e4eSSatish Balay   Level: beginner
19e5c89e4eSSatish Balay 
20811af0c4SBarry Smith   Note:
21811af0c4SBarry Smith   This function makes a system call and thus SHOULD NOT be called from an error handler.
22811af0c4SBarry Smith 
23aec76313SJacob Faibussowitsch   Developer Notes:
24811af0c4SBarry Smith   This function is called once during `PetscInitialize()`.
25811af0c4SBarry Smith   It stashes the timestamp, and uses it when needed. This is so that
26811af0c4SBarry Smith   error handlers may report the date without generating possible
27811af0c4SBarry Smith   additional system errors during the call to get the date.
28e5c89e4eSSatish Balay 
2910450e9eSJacob Faibussowitsch .seealso: `PetscGetHostName()`
30e5c89e4eSSatish Balay @*/
PetscGetDate(char date[],size_t len)31d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetDate(char date[], size_t len)
32d71ae5a4SJacob Faibussowitsch {
330298fd71SBarry Smith   char *str = NULL;
34e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
35e5c89e4eSSatish Balay   time_t aclock;
36e5c89e4eSSatish Balay #else
37e5c89e4eSSatish Balay   struct timeval tp;
38e5c89e4eSSatish Balay #endif
39e5c89e4eSSatish Balay 
40e5c89e4eSSatish Balay   PetscFunctionBegin;
41e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
42e5c89e4eSSatish Balay   time(&aclock);
439566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len));
44e5c89e4eSSatish Balay #else
45*c8025a54SPierre Jolivet   gettimeofday(&tp, NULL);
469566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len));
47e5c89e4eSSatish Balay #endif
48e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
499566063dSJacob Faibussowitsch   PetscCall(PetscStrstr(date, "\n", &str));
50e5c89e4eSSatish Balay   if (str) str[0] = 0;
513ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
52e5c89e4eSSatish Balay }
53